将非文本文件读入Python

2024-10-01 07:16:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在非文本文件中阅读。它有一个扩展名“.map”,但可以通过记事本打开。我应该如何通过python打开这个文件?在

file = open("path-to-file","r")不适合我。它返回没有这样的文件或目录:错误。在

我的文件如下:

111 + gi|89106884|ref|AC_000091.1| 725803 TCGAGATCGACCATGTTGCCCGCCT IIIIIIIIIIIIIIIIIIIIIIIII 0 14:A>G 457 + gi|89106884|ref|AC_000091.1| 32629 CCGTGTCCACCGACTACGACACCTC IIIIIIIIIIIIIIIIIIIIIIIII 0 4:C>G,22:T>C 779 + gi|89106884|ref|AC_000091.1| 483582 GATCACCCACGCAAAGATGGGGCGA IIIIIIIIIIIIIIIIIIIIIIIII 0 15:A>G,18:C>G 784 + gi|89106884|ref|AC_000091.1| 226200 ACCGATAGTGAACCAGTACCGTGAG IIIIIIIIIIIIIIIIIIIIIIIII 1

如果我这样做:

file = open("D:\bowtie-0.12.7-win32\bowtie-0.12.7\output_635\results_NC_000117.fna.1.ebwt.map","rb")

它仍然给我No such file or directory: 'D:\x08owtie-0.12.7-win32\x08owtie-0.12.7\\output_635\results_NC_000117.fna.1.ebwt.map'错误。这是因为文件不是二进制文件还是我没有权限?在

希望能帮上忙!在


Tags: 文件refmapoutput错误openresultsac
3条回答

您在这里发现了Unix和Windows之间的一个细微差别。在

既然你提到了记事本,你必须在Windows上运行它。在DOS/Windows环境中,打开二进制文件需要为二进制文件指定属性'b',其他人已经指出了这一点。对于这一点,Unix/Linux要轻松一些。省略属性“b”仍将打开一个二进制文件。在

在C库的fopen()调用中也显示了相同的行为。在

二进制文件应该使用二进制模式。在

f = open("path-to-file","rb")

但是,如果您没有适当的权限或不知道文件本身的格式,这将不会有帮助。在

编辑:

显然,您没有费心阅读错误消息,否则您会注意到它使用的文件名不是您所期望的文件名。在

^{pr2}$

如果它是非文本文件,您可以尝试使用binary格式打开它。试试这个-

with open("path-to-file", "rb") as f:
    byte = f.read(1)
    while byte != "":
        byte = f.read(1) # Do stuff with byte.

with语句处理打开和关闭文件,包括是否在内部块中引发异常。在

当然,由于格式是二进制的,所以你需要知道你在阅读之后要做什么。另外,这里我一次读1个字节,你也可以定义更大的块大小。在

更新:也许这不是一个二进制文件。您可能在文件编码方面遇到问题,这些字符可能不是ascii字符集,也可能属于unicode字符集。试试这个-

^{pr2}$

如果您在终端中打印出来,您可能仍然会胡言乱语,因为终端可能不支持此字符集。我建议,继续并处理文本,假设它正确打开。在

Source

相关问题 更多 >