打印在一行不能正常工作的Python 3

时间:2016-07-04 23:17:38

标签: python printing text-files readfile

我对编程非常陌生,我正在研究一些代码来从一堆文本文件中提取数据。我已经能够做到这一点,但数据在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)

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