【问题标题】:Parsing a file with ".data" extension in Python?在 Python 中解析带有“.data”扩展名的文件?
【发布时间】:2015-09-24 06:49:42
【问题描述】:

我在 OS X 中使用 idle,我正在尝试解析带有 .data 扩展名的文件:

FP = open('<filename>.data','r')
lines=FP.readlines()
print lines

但这会打印一个空数组:[]

我也尝试过 Sublime,但也没有用。在 Python 中使用另一种方法来读取此内容?

【问题讨论】:

  • 另一个可能的问题:你确定FP不为空吗?
  • 我以前犯过这个错误。但是是的,我确定它不是空的。
  • 嗯....您是在程序的其他任何地方打开该文件吗?还是您发布的所有内容都是您的脚本?
  • 我还使用了chmod 来确保权限按预期工作。但是,权限末尾仍有@ 符号。这是一个问题吗?

标签: python macos parsing readlines


【解决方案1】:

binary 模式打开它并打印其内容的 repr

print os.stat("filename.data") #ensure that st_size > 0

with open("filename.data","rb") as f:
    print repr(f.read())

如果这给出了一个空字符串而不是你确实有一个空文件...

我猜 ls -l 告诉你文件是 0 字节大?

【讨论】:

  • 虽然是个好主意,但这也给出了一个空白字符串,而不是一个空数组:''
  • 因为你的文件是空的......也许在某个时候你做了open("filename.data","w") 创建一个新的空文件?
【解决方案2】:

当仅通过文件名打开文件时,Python 默认会首先查找当前工作目录。如果您使用的是 IDLE,这实际上可能与您的 .py 文件所在的目录不同。尝试从与“*.data”文件相同的目录中的命令行运行脚本。

【讨论】:

  • 如果您在打开文件时没有收到错误,那么该文件确实存在并且正在打开。我只能得出结论,该文件实际上是空的。您可以转储 .data 文件的内容吗?或者至少创建一个带有虚拟数据的新数据文件?您还可以从包含 .py 和 .data 文件的目录中转储“ls -la”的控制台输出吗?
【解决方案3】:

您可以将文件指针转换为自动获取所有行的列表,而不是.readlines()。所以你可以这样做:

FP = open('filename.data', 'r')
print(list(FP))

或者这个:

FP = open('filename.data', 'r')
for line in FP:
    print(line)

【讨论】:

  • 我确实在文档中看到了这个替代方案,但它给出了相同的结果。
  • 脚本中除此之外还有其他代码吗?一个可能的问题是,如果您已经读取了文件中的所有行,则无法重新读取它们,因为读取指针已经到达文件末尾。
  • 它从来没有工作过 - 所以这就是为什么我不认为光标会在文件末尾。但是无论如何,我如何在开头重置光标?
  • 在第一次从文件中读取任何内容之前,请执行以下操作:start = FP.tell()(这会保存文件的开始位置),然后每当您想回到开头时,请执行 FP.seek(start) 哪个会告诉文件指针回到你之前保存的起始位置。
  • 我知道,但是如果之前在程序中已经读取过该文件,那么指针将位于末尾。这就是为什么我问脚本中是否还有其他代码可能已经读过了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-17
  • 2019-02-03
  • 2011-05-25
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多