单行打印无效 Python 3

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):

您也不需要显式关闭输入文件 - 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))