将字符串与python中的文件中的数据匹配

时间:2017-09-20 22:53:18

标签: python

我有一个文件,它采用模糊的表格形式。换行符(\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是该行的所有文字。

我哪里出错?

4 个答案:

答案 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必须被剥离。