[英]Print on a single line not working Python 3
我是编程新手,正在研究一些代码以从一堆文本文件中提取数据。 我已经能够做到这一点,但是数据对我在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()
因此,基本上我正在做的是查找关键字是否在该行上,然后在该行上打印该行。
即使我有print(,end ='*'),也没有一行打印出来。 它输出:
Find me
*find you
*find us
问题出在哪儿? (我正在使用Python 3.5.1)
您的直接问题是,在打印行之前没有从行中删除换行符。 通常的方法是使用strip()
,例如:
print(line.strip(), end='*')
如果一行中出现多个特殊短语,您还将打印该行的多个副本。 为了避免这种情况,请在打印后添加一个break
语句,或者使用(如果更好(一个更高级的构造,除非您习惯于生成表达式), if any(keyword in line for keyword in data):
才有意义)使用if any(keyword in line for keyword in data):
您也不需要显式关闭输入文件with open(...) as ...:
的要点是with open(...) as ...:
上下文管理器是它在退出文件时将其关闭。
而且我会避免将string
用作变量名-它不会告诉任何人该变量的用途,并且如果最终对任何内容都使用内置的string
模块,可能会引起混乱。 它不如隐藏诸如list
类的内置构造函数那样糟糕,但是值得避免。 特别是因为它在这里对您没有任何帮助,因此您可以仅使用if a in line:
如果您不想使用上述的any()
版本,请在此处使用。
除此之外,如果您的数据不是非常大(并且希望不是全部都放在一行上),您将得到整齐的代码,并通过使用.join()
来避免尾随定界符字符串的方法,例如:
import os
data=['Find me','find you', 'find us']
with open('C:\\Users\\Documents\\File.txt', 'r') as inF:
print "*".join(line.strip() for line in inF if any(keyword in line for keyword in data))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.