繁体   English   中英

在单行上打印不起作用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):才有意义)使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM