2017-09-20 38 views
0

我有一个文件,它需要表格的模糊形式。换行(\r\n)不同的行和标签(\t)在那里有一个以上的将字符串与Python中的文件中的数据匹配

我已经打开了文件,然后由线读取它行成像这样的列表行单独列:

file = open('data.txt') 
table = file.readlines() 

我现在试图从文件中删除某些行(从列表中的项目),这是不相关的(列标题等)。我的尝试是这样的:

for i in table: 
    if table[i] == "Tue": 
     del(table[i]) 

但既不"Tue""Tue\r\n"与条件匹配。 我查过记事本++Tue\r\n这个文件就行了。

我哪里出错了?

+0

只是''Tue \ n“'怎么样?同样'对于我在表中'实际上使'i'成为表格的一行,所以你不想用'i'重新索引。无论如何,最好的想法是询问'Tue'是否在':'行中:'表中的行:...如果行中有“Tue”。对于例如'星期二'中的'Tue'返回'True'。 –

+0

列表中的每个项目都是完整的一行。所以,如果你有如果table [i] ==“Tue”,你正在检查的是如果整行包含一个单词和该单词是星期二。你不是简单地检查单词Tue是否存在于该行的某处。在这种情况下最好使用正则表达式或类似的东西:if table [i]中的'Tue'。 –

+1

我不明白,你期望什么? “'Tue'!=”Tue \ r \ n“'......,此外,正如答案所指出的那样,您错误地使用了”for-loop“。最后,*在迭代时不要从列表中删除*(除非你非常小心......) –

回答

0

当你为“我在表中”做的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(表格[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

for i in table将遍历表列表,并将i设置为列表中的每个成员,在您的情况下,文件中的一行 - 一个字符串。

所以,当你正在测试table[i]的内容时,你可能会得到一个索引错误(顺便说一句,你应该发布你的错误:))。

测试i而不是table[i]

+1

好赶上!但是,''Tue'!=“Tue \ r \ n”' –

+0

为了解决这个问题,@ juanpa.arrivillaga状态就像检查“Tue”是否在行中一样简单,而不是如果它等同于行。也许最好给我一个更具描述性的名字。 –

0

不要以字符串形式读取文件。使用某种类型的CSV库,并在行上作为记录和列作为字段进行操作。有太多的特殊情况需要考虑,有人已经在图书馆为你解决了。

tablib就是这样一个图书馆,但有很多要根据你的口味考虑。

0

亚历克斯实际上在第一个评论“Tue \ n”中找到了匹配文档。/r必须被删除。