Python 将整个文件读成一行

Python reading the entire file as one line

我有一个如下所示的数据文件。

Index   Code    Pos1    Strand  Chr2    Pos2    length  blocks
1   G32_bkd.ctx:Vu01(old4)  62739   47+9-   Vu01(old4)  63651   790 0
2   G32_bkd.ctx:Vu01(old4)  441403  10+0-   Vu01(old4)  446263  4893    0
3   G32_bkd.ctx:Vu01(old4)  450546  15+0-   Vu01(old4)  451091  576 0
4   G32_bkd.ctx:Vu01(old4)  459741  10+0-   Vu01(old4)  460841  1068    0
5   G32_bkd.ctx:Vu01(old4)  612262  14+0-   Vu01(old4)  629013  16788   0
6   G32_bkd.ctx:Vu01(old4)  688380  23+0-   Vu01(old4)  693207  4872    0
7   G32_bkd.ctx:Vu01(old4)  730643  12+0-   Vu01(old4)  740497  7011    0
8   G32_bkd.ctx:Vu01(old4)  834116  16+1-   Vu01(old4)  835797  1752    0

我想单独读取 header 行,然后在 for 循环中读取每一行。我的代码是

with open(file) as f:
    title_line = f.readline()
    for line in f:
        line = line.strip()
        cols = line.split()

当我在 for 循环中检查 print(line) 时,它没有打印任何内容。但是当我选中 print(title_line) 时,整个文件都会打印出来,保留文件中的确切格式。什么地方出了错?

N.B。所以,我只是复制并粘贴了整个文件并以不同的名称保存它,它工作得很好。

假设您有一个文件 'yourfile.txt' 并且它的大小不大。

f = open('yourfile.txt','r')  

跳过阅读行中的 title_line。

for line in f.readlines()[1:]:
    line = line.strip()
    cols = line.split()
    # output the result
    print ",".join(x for x in cols)

如果 Python 出于某种原因不喜欢原始文件中的行尾字符,可能会导致该行为。

为了确认,您可以在 Linux 上使用 od -t a file | less,并检查其中的内容。也许该文件符合不同的操作系统标准?如果不在 Linux 上,您可以使用 Python 本身来打印带有 ord 的每个字符以查看它正在使用什么(\n、\r、\r\n)。

如果是这种情况,您有一些选择:

  • 对于 Python 2,您可以在 通用换行符 模式下打开文件。即"U":
    • open (file, "U")
    • 这是一种快速简便的方法来确认这确实是问题并解决它,但不建议长期使用
  • 否则,您可以使用io.open代替open,并使用其newline=参数。默认值 None 应该是您需要的。

如果这不能解决您的问题,请提供:

  • 您使用的操作系统
  • 您正在使用的 Python 版本
  • 原始文件的源操作系统

作为不相关的旁注,我建议您检查 Python 的内置 csv 模块来读取您的文件。看起来非常合适(csv 模块可以配置为使用空格或制表符,而不是逗号)

参考文献