每当我尝试将数字数据写入我的 .txt 文件时,它都会引发错误
Posted
技术标签:
【中文标题】每当我尝试将数字数据写入我的 .txt 文件时,它都会引发错误【英文标题】:Whenever, i try writing the numeric data into my .txt file, it raises an error 【发布时间】:2019-08-20 11:15:47 【问题描述】:我尝试过直接字符串转换和倍数方法,但是错误不断出现。
f.write("Original Price: " + str(original_price) + "/n")
#Where original price is an integer taken through an html source.
错误: f.write("原价:" + str(original_price)) 文件“C:\ProgramData\Anaconda3\lib\encodings\cp1252.py”,第 19 行,在 编码 返回 codecs.charmap_encode(input,self.errors,encoding_table)[0] UnicodeEncodeError:“charmap”编解码器无法对字符“\u20b9”进行编码 位置 16:字符映射到
正在寻找将这些信息写入我的文件的方法。
【问题讨论】:
char 是卢比。\u20b9
是卢比。我猜它无法使用 unicode 对其进行编码。而且,它也是\n
而不是/n
。
Python为什么要写cp1252;你是怎么打开文件的?
【参考方案1】:
write
方法需要一个 bytes
对象;您正在尝试传递 str
对象。您需要先对其进行编码。写字符串的UTF-8编码,例如,
f.write("Original Price: \n".format(original_price).encode('utf-8'))
original_price
的值似乎不是一个实际的数字;它包含卢比符号₹
,在您尝试使用的字符编码中没有对应的符号。
【讨论】:
嘿chepner,你试过编码吗?因为引发了TypeError: write() argument must be str, not bytes
错误。
f
对象的类型是什么?
(另外,我的 Python 2 偏见正在显现,但无论 f
是什么,它都在尝试使用没有卢比符号的 CP-1252 对字符串进行编码。)
我正在尝试使用 python 3。也许这就是差异的原因。
@OzgurBagci 是的,open
可以返回一个对象,该对象将在 Python 3 中为您进行编码。这是正确的答案,除非 OP 以其他方式获得f
。 (但无论如何,这个想法都是正确的;f
是 something,它试图将字符串编码为无法处理 ₹ 的字符集。)【参考方案2】:
我猜到了一个解决方案:
您应该使用编码参数打开文件:
with open('towrite.txt, 'w+', encoding='utf-8') as f:
f.write('Original Price: ' + str(original_price) + '\n')
这应该可行。
【讨论】:
以上是关于每当我尝试将数字数据写入我的 .txt 文件时,它都会引发错误的主要内容,如果未能解决你的问题,请参考以下文章
每当我尝试将我的 django 应用程序推送到 Heroku 时,我的日志文件中都会出现以下错误,请协助我应该如何解决它,