【问题标题】:tuple() not working fully with files in pythontuple() 不能完全处理 python 中的文件
【发布时间】:2015-05-20 21:29:33
【问题描述】:

所以我试图将文件中存在的所有行复制到列表中。从上一个问题中,我发现了这种将所有行复制到列表中的方法。我面临的问题是并非文件的所有内容都被复制到列表中。

names = tuple(open("MusicNames.txt", 'r'))
names2 = tuple(open("MusicNamesOtherFolder.txt", 'r'))
print names
print names2

这是我复制名称的方法,但在特定行之后,列表停止附加,并且列表中的最后一项不包含整行。 什么可能导致这样的错误?

好的,我现在将包含我的完整代码。当我注释掉我正在写入文件的代码部分时,它可以正常工作。 这是代码: http://pastebin.com/Q7W3VXPi

【问题讨论】:

  • "将所有行复制到一个列表中"...所以open("MusicNames.txt", 'r').readlines()?
  • 我试过了,它仍然停在同一个地方。我还检查了我正在打开的文件,它确实包含在它停止的地方之后的行。
  • 您希望它们在列表还是元组中?它们是 python 中的不同原语。
  • 你能提供你正在使用的文件吗?或者至少是导致行为的字符串?
  • 如果您愿意,我已经更新了我的答案并提供了更多详细信息,我也可以上传文本文件

标签: python tuples


【解决方案1】:

您应该在完成写入文件对象后关闭它们。否则,在您读取文件时,您的所有更改可能都不会刷新到实际文件中。

fp2 = open("MusicNamesOtherFolder.txt", 'w')

#writing to fp2 goes here...

fp2.close()

#now you are ready to open the file again.
names2 = tuple(open("MusicNamesOtherFolder.txt", 'r'))

如果您觉得同时编写 openclose 方法很麻烦,您可以使用 with 语句,它会为您完成关闭。

with open("MusicNamesOtherFolder.txt", 'w') as fp2:
    #writing to fp2 goes here....

#now you are ready to open the file again.
names2 = tuple(open("MusicNamesOtherFolder.txt", 'r'))

【讨论】:

  • 感谢您的回答,这似乎解决了这个问题。是否有任何原因导致更改未刷新到文件中?
  • AFAIK,这是编程语言采用的一种常见优化方式,即每次您要求时都不会实际执行文件 I/O。如果将批量修改保存在内存中,则操作系统的工作量会减少,只有在积累了大量数据时才写入实际文件。缺点是,您可以通过再次打开文件来惊讶地发现该语言。
【解决方案2】:

您可以使用它来获取完整的行列表

 names = [line for line in open("MusicNames.txt", 'r')]
 names2 = [line for line in open("MusicNamesOtherFolder.txt", 'r')]

【讨论】:

  • 为什么不names = list(open("MusicNames.txt", 'r'))
  • 问题似乎与现在完全不同。不过谢谢你的回答。
猜你喜欢
  • 2011-03-28
  • 2014-05-12
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
相关资源
最近更新 更多