Python将整个文件作为一行读取

时间:2017-11-29 02:09:37

标签: python python-2.7 file-read

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

在readlines中跳过title_line。

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

答案 1 :(得分:0)

可能导致该行为的一件事是,如果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模块可以配置为使用空格或制表符,而不是逗号)

<强>参考