每当我尝试将数字数据写入我的 .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。 (但无论如何,这个想法都是正确的;fsomething,它试图将字符串编码为无法处理 ₹ 的字符集。)【参考方案2】:

我猜到了一个解决方案:

您应该使用编码参数打开文件:

with open('towrite.txt, 'w+', encoding='utf-8') as f:
    f.write('Original Price: ' + str(original_price) + '\n')

这应该可行。

【讨论】:

以上是关于每当我尝试将数字数据写入我的 .txt 文件时,它都会引发错误的主要内容,如果未能解决你的问题,请参考以下文章

Fortran 覆盖

尝试将数字写入二进制文件时引发异常

写入txt文件,但不覆盖

将大双数写入txt文件C ++ [重复]

尝试使用引用 C 的函数写入文件时程序崩溃

每当我尝试将我的 django 应用程序推送到 Heroku 时,我的日志文件中都会出现以下错误,请协助我应该如何解决它,