0

我正在尝试将输出重定向到 task1.txt。正常的打印功能可以正常工作,但无法使用 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))
4

1 回答 1

3

不要重新分配sys.stdout. 相反,使用函数file上的选项:print()

with open('C:\\Dropbox\\Python\\task1.txt','w') as output:
    print ("".join(lines[i] for i in selected), file=output)
于 2012-09-02T09:08:24.250 回答