我目前的python 3代码存在问题。
replace_line('Products.txt', line, tenminus_str)
我试图变成utf-8的行,但是当我尝试像其他人那样尝试这样做时,我会遇到错误,例如没有属性,以及当我尝试添加时,例如。 ..
.decode("utf8")
...到最后,我仍然得到它正在使用ascii的错误。我还尝试了其他方法,如添加io等其他方法。面前并添加逗号
encoding = 'utf8'
我用于replace_line的函数是:
def replace_line(file_name, line_num, text):
lines = open(file_name, 'r').readlines()
lines[line_num] = text
out = open(file_name, 'w')
out.writelines(lines)
out.close()
我该如何解决这个问题?请注意,我是Python的新手,并且不够先进,无法进行良好的调试。
编辑:对此问题的解决方法不同于重复'
编辑2:我现在有另一个错误。
File "FILELOCATION", line 45, in refill replace_line('Products.txt', str(line), tenminus_str)
File "FILELOCATION", line 6, in replace_line lines[line_num] = text
TypeError: list indices must be integers, not str
这是什么意思,我该如何解决?
答案 0 :(得分:4)
codecs
模块正是您所需要的。 detail这里
import codecs
def replace_line(file_name, line_num, text):
f = codecs.open(file_name, 'r', encoding='utf-8')
lines = f.readlines()
lines[line_num] = text
f.close()
w = codecs.open(file_name, 'w', encoding='utf-8')
w.writelines(lines)
w.close()
答案 1 :(得分:2)
将您的功能更改为:
def replace_line(file_name, line_num, text):
with open(file_name, 'r', encoding='utf8') as f:
lines = f.readlines()
lines[line_num] = text
with open(file_name, 'w', encoding='utf8') as out:
out.writelines(lines)
encoding='utf8'
会正确解码您的UTF-8文件。
with
会自动关闭该文件。
由于您的文件以\xef
开头,因此它可能在开头有一个UTF-8编码的字节顺序标记(BOM)字符。上面的代码将在输出时保留该代码,但如果您不希望它使用utf-8-sig
进行输入编码。然后它会被自动删除。
答案 2 :(得分:1)
处理编码问题您可以尝试将以下设置添加到头部
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
Type = sys.getfilesystemencoding()
答案 3 :(得分:0)
如果正在读取文件,请尝试添加 encoding ='utf8'
with open("../file_path", encoding='utf8'):
# your code