尽管被写入,但文件为空。

时间:2017-09-15 21:25:26

标签: python

我一直在阅读有关编码和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。

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)