我有一个数据文件,如下所示。
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)时,整个文件是打印出来的,保持文件中的确切格式。哪里出了问题?
注:所以,我只是复制和粘贴整个文件,并以不同的名称保存它,它工作得很好。
发布于 2017-11-29 02:52:35
可能导致这种行为的一件事是,如果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模块可以配置为使用空格或制表符,而不是逗号)
参考资料
发布于 2017-11-29 02:21:46
假设您有一个文件'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)https://stackoverflow.com/questions/47543924
复制相似问题