我一直在阅读有关编码和python I / O文档的内容,但由于我对编程有点新意,所以并不了解。我只是想读取一个文本文件,然后将每一行保存到另一个文本文件。但其中一些行是日文字符,虽然在打印时它们在Python IDE中正确显示,但文件中生成的文本只是空的。这就是我想要做的事情:
filename = 'test.txt' # File with the japanese characters
filename2 = 'test2.txt'
text = open(filename,'rb') # I've tried opening it as 'utf-8' too
text2 = open(filename2,'w',encoding='utf-8') # Output file
for line in text:
new_line = line.decode() # From bytes to utf-8
print(new_line) # Just to check
text2.write(new_line)
# Checking if file was written
text3 = open(filename2,'r',encoding='utf-8')
for line2 in text3:
print(line2 + 'something')
此代码只打印输入文件中的行,但是当使用最后一位打印输出文件中的内容时,它不打印任何内容。我在Linux和输出文件test2.txt上尝试这个,它只是空的,甚至没有英文行。如果我尝试在Windows上运行它,我会收到有关charmap在使用.write()时无法识别该字符或其他内容的错误。如果我删除日语中的所有行,这可以正常工作。我也尝试用utf-8编码打开输入文件(它已经以这种方式保存,但以防万一)而不是字节,但结果相同。
以防万一,这是日本行之一:
▣世界から解放され▣
希望你能帮助我:)。
编辑:我正在使用Python 3.5.2。答案 0 :(得分:1)
编码很好,没有看到上次打印结果的问题是你已经打开文件test2.txt
进行写入。在您明确关闭流text2
之前,您将无法从另一个流中的文件中读取。所以:
# close write stream
text2.close()
# now you can open the file again to read from it
text3 = open(filename2,'r',encoding='utf-8')
在Linux和OSX上测试它产生:
$ echo "▣世界から解放され▣" > test.txt
$ python3.5 script.py
▣世界から解放され▣
▣世界から解放され▣
something
答案 1 :(得分:0)
您必须关闭该文件,即写入所有内容。最好,使用with
- 声明:
filename = 'test.txt' # File with the japanese characters
filename2 = 'test2.txt'
with open(filename,'r',encoding='utf-8') as text:
with open(filename2,'w',encoding='utf-8') as text2:
for line in text:
text2.write(line)