2016-07-04 84 views
0

我对编程非常陌生,并且正在研究一些代码以从一堆文本文件中提取数据。我已经能够做到这一点,但是这些数据在Excel中对我无用。因此,我希望将其全部打印在一行中,并用特殊字符分隔,然后我可以在Excel中进行分隔。单行打印不起作用Python 3

这里是我的代码:

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)

回答

1

您的直接问题是,在打印它们之前,您并未从行中删除换行符。通常的方式做,这是strip(),如:

print(line.strip(), end='*') 

您还可以打印线的多个副本,如果你的特殊短语不止一个出现在该行。为避免这种情况,请在打印后添加break声明,或者(更好,但更高级的构造在用于生成表达式之前可能没有意义)使用if any(keyword in line for keyword in data):

您也不需要显式关闭输入文件 - with open(...) as ...:上下文管理器的要点是它在退出时关闭文件。

而且我会避免使用string作为变量名称 - 它不会告诉任何人有关变量的用途,如果您最终使用内置的string模块进行任何操作,会导致混淆。它不像阴影像list这样的内置构造函数那么糟糕,但值得避免。特别是因为它在这里没有为你做任何事情,如果你不想使用上面的any()版本,你可以在这里使用if a in line:。除了所有这些,如果你的数据不是非常大(并且我希望这不是如果你想把它全部放在一行上),你将会得到更加整洁的代码,并且避免使用尾随分隔符.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)) 
+0

哦,哇,太简单了! 非常感谢您的额外建议!我很感激需要花费的时间。 – micuzzo

+0

如果您使用电子表格和Python进行大量工作,请确保查看内置的'csv'模块 - 当您处理交易时,它会为您做很多工作带有分隔文件。 –

+0

是的,我一直在研究它,但是这种有点狡猾的方式是为了得到一个快速的结果。但再次感谢! – micuzzo