我有一个文件,它采用模糊的表格形式。换行符(\r\n
)将行和标签(\t
)分隔在有多个行的行上
我打开了文件然后逐行读到这样的列表:
file = open('data.txt')
table = file.readlines()
我现在正在尝试从文件中删除某些行(因此列表中的项目)(列标题等)。我的尝试看起来像这样:
for i in table:
if table[i] == "Tue":
del(table[i])
但"Tue"
而非"Tue\r\n"
都不符合条件。
我已在 notepad ++ 中检查了该文件,Tue\r\n
是该行的所有文字。
我哪里出错?
答案 0 :(得分:2)
for i in table
将遍历表列表,并将i设置为列表中的每个成员,在您的情况下,文件中的一行 - 字符串。
因此,当您测试table[i]
的内容时,您可能会收到索引错误(顺便说一下,您应该发布错误:))。
测试i
而不是table[i]
。
答案 1 :(得分:0)
当你在表格中执行“for i”时,i变量不是行的计数器,它是实际的数据行。如果你想要计数器,那么这可行:
for i, line in enumerate(table):
要处理任何可能的换行符或尾随空格rstrip很有帮助:
#!/bin/python
file = open('a')
table = file.readlines()
for line in table:
if line.rstrip() != 'Tue':
print line
但是你必须要小心从表中删除 - 每次你做的所有事情都向下移动,所以当前的del(table [i])将以神秘的方式失败。如果你真的想要创建一个新数组,这可以工作:
#!/bin/python
file = open('a')
table = file.readlines()
table2 = []
for line in table:
if line.rstrip() != 'Tue':
table2.append(line.rstrip())
for line in table2:
print line
这会做你想要的事情。
答案 2 :(得分:0)
不要将文件作为字符串读取。使用某种CSV库并作为记录和列作为字段在行上操作。有太多特殊情况需要考虑,有人已经在图书馆找到了你。
tablib
是一个这样的图书馆,但根据您的口味有很多需要考虑。
答案 3 :(得分:0)
亚历克斯实际上在第一个评论中发现了这个评论" Tue \ n"毕竟与文档匹配。在某些地方,/ r必须被剥离。