简体   繁体   中英

Print on a single line not working Python 3

I'm very new to programming and am working on some code to extract data from a bunch of text files. I've been able to do this however the data is not useful to me in Excel. Therefore, I would like to print it all on a single line and separate it by a special character, which I can then delimit in Excel.

Here is my code:

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

So basically what I'm doing is finding if a keyword is on that line and then printing that line if it is.

Even though I have print(,end='*'), I don't get the print on a single line. It outputs:

Find me

*find you

*find us

Where is the problem? (I'm using Python 3.5.1)

Your immediate problem is that you're not removing the newline characters from your lines before printing them. The usual way to do this is with strip() , eg:

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

You'll also print multiple copies of the line if more than one of your special phrases appear in the line. To avoid that, add a break statement after your print, or (better, but a more advanced construct that might not make sense until you're used to generator expressions) use if any(keyword in line for keyword in data):

You also don't need to explicitly close the input file - the point of the with open(...) as ...: context manager is that it closes the file when exiting it.

And I would avoid using string as a variable name - it doesn't tell anyone anything about what the variable is used for, and it can cause confusion if you end up using the built-in string module for anything. It's not as bad as shadowing a built-in constructor like list , but it's worth avoiding. Especially since it does nothing for you here, you can just use if a in line: here if you don't want to use the any() version above.

In addition to all that, if your data is not extremely large (and I hope it's not if you're trying to fit it all on one line) you'll get tidier code and avoid the trailing delimiter by using the .join() method on strings, eg something like:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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