我有一个如下的数据文件。
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。所以,我只是复制并粘贴了整个文件,并以不同的名称保存,它工作得很好。
答案 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)。
如果是这样的话,你有一些选择:
open (file, "U")
io.open
代替open
,并使用其newline=
参数。默认值None
应该是您所需要的。如果这不能解决您的问题,请提供:
作为一个不相关的附注,我建议您查看Python的内置csv
模块来阅读您的文件。它似乎是一个完美的契合(csv
模块可以配置为使用空格或制表符,而不是逗号)
<强>参考强>