我对编程非常陌生,我正在研究一些代码来从一堆文本文件中提取数据。我已经能够做到这一点,但数据在Excel中对我没用。因此,我想将它们全部打印在一行中并用特殊字符分隔,然后我可以在Excel中分隔。
这是我的代码:
import os
data=['Find me','find you', 'find us']
with open('C:\\Users\\Documents\\File.txt', 'r') as inF:
for line in inF:
for a in data:
string=a
if string in line:
print (line,end='*') #print on same line
inF.close()
所以基本上我所做的就是找到关键字是否在该行上,然后打印该行,如果是的话。
即使我有打印(,结束=' *'),我也不能在一行上打印。它输出:
Find me
*find you
*find us
问题出在哪里? (我使用的是Python 3.5.1)
答案 0 :(得分:1)
您当前的问题是,在打印之前,您不会从行中删除换行符。通常的方法是使用strip()
,例如:
print(line.strip(), end='*')
如果行中出现多个特殊短语,您还将打印该行的多个副本。为避免这种情况,请在打印后添加break
语句,或者(更好,但是在您习惯生成表达式之前可能没有意义的更高级的构造)使用if any(keyword in line for keyword in data):
您也不需要显式关闭输入文件 - with open(...) as ...:
上下文管理器的意思是它在退出时关闭文件。
我会避免使用string
作为变量名 - 它不告诉任何人任何关于变量用途的内容,如果最终使用内置{{1},它可能会引起混淆任何东西的模块。它不像遮蔽像string
这样的内置构造函数那么糟糕,但是值得避免。特别是因为它在这里没有任何帮助,如果你不想使用上面的list
版本,你可以在这里使用if a in line:
。
除此之外,如果您的数据不是非常大(我希望不是因为您尝试将其全部放在一行上),您将获得更整洁的代码并通过使用{来避免尾随分隔符字符串上的{1}}方法,例如:
any()