我尝试用没有BOM的编码utf-8写一个列表到txt文件。但有一个问题是: 如果我使用带有BOM编码的utf-8创建该文件:
false
并使用我的函数将其读入列表:
ポ
1
田
11
直
11
子
11
我得到了正确的结果:import codecs
def file_to_list(file_name):
results = []
f = codecs.open(file_name, encoding='utf-8')
for line in f:
results.append(line.replace('\r\n', ''))
return results
list_1 = file_to_list('test_read.txt')
print(list_1)
但在此之后,我使用另一个函数写回文件并再次读取该文件,出现问题:
['ポ', '1', '田', '11', '直', '11', '子', '11']
打印的返回是:def list_to_file(file_name, thelist):
f = codecs.open(file_name, "w", encoding='utf-8')
for item in thelist:
f.write("%s\n" % item)
list_to_file('test_read.txt', list_1)
list_2 = file_to_list('test_read.txt')
print(list_2)
那么,['ポ\n', '1\n', '田\n', '11\n', '直\n', '11\n', '子\n', '11\n']
有什么不对?
答案 0 :(得分:2)
您不应该替换尾随空格/换行符,因为它们可能因平台而异。你应该剥离它们。更重要的是,您只使用\n
写入文件,但您的功能需要\r\n
。
在file_to_list
功能中,替换:
results.append(line.replace('\r\n', ''))
与
results.append(line.rstrip())
请参阅:
>>> 'some line\n'.replace('\r\n', '')
'some line\n'