简体   繁体   中英

Python 3: sys.stdout not working

i am trying redirect output to task1.txt. normal print funcion working perfectly but text can't be redicted with sys.stdout.

import random
import sys
num_lines = 10

# read the contents of your file into a list
sys.stdout = open('C:\\Dropbox\\Python\\task1.txt','w')
with open('master.txt', 'r') as f:
    lines = [L for L in f if L.strip()]  # store non-empty lines

# get the line numbers of lines that are not marked
candidates = [i for i, L in enumerate(lines) if not L.startswith("*")] 

# if there are too few candidates, simply select all
if len(candidates) > num_lines:
    selected = random.sample(candidates, num_lines) 
else:
    selected = candidates  # choose all

# print the lines that were selected
# write.selected(sys.stdout)
print ("".join(lines[i] for i in selected))

# Mark selected lines in original content
for i in selected:
    lines[i] = "*%s" % lines[i]  # prepend "*" to selected lines

# overwrite the file with modified content
with open('master.txt', 'w') as f:
    f.write("".join(lines))

Don't re-assign sys.stdout . Instead, use the file option on the print() function :

with open('C:\\Dropbox\\Python\\task1.txt','w') as output:
    print ("".join(lines[i] for i in selected), file=output)

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