每次迭代都会替换以前的迭代?

时间:2018-07-30 10:45:17

标签: python

最后一行给出:

  

ValueError:对关闭的文件进行I / O操作。

import sys
for i in range(1,123):
    if i%2 ==0:
        sys.stdout = open('log1.txt', 'w')
        print(i)
sys.stdout.close()

如何解决这些问题?

关于第一个问题,txt中仅打印最后插入的内容,而应该显示所有插入内容。

-更新

folder = path.Path(r"C:\Users\user\Desktop\SHAPE")
shapefiles = []
for shpfile in glob.iglob('**/Desktop/SHAPE/**/' ,recursive = True):
    try:
        shapefiles.append(geopandas.read_file(shpfile))
    except FionaValueError as ex:
        if not os.listdir(shpfile):
            sys.stdout = open('log.txt', 'w')
            print(f'{shpfile} is empty')

您能告诉我如何将此打印结果写入txt吗?

2 个答案:

答案 0 :(得分:1)

正确的应该是:

with open('log1.txt', 'a') as myFile:
    for i in range(1,123):
        if i%2 ==0:
            myFile.write(str(i) + '\n')

更正代码如下:

import sys

sys.stdout = open('log1.txt', 'a')
for i in range(1,123):
    if i%2 ==0:
        print(i)
sys.stdout.close()

您应该在迭代之外打开文件。您正在使用写入模式覆盖现有文件。

文件现在包含:

2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
38
40
42
44
46
48
50
52
54
56
58
60
62
64
66
68
70
72
74
76
78
80
82
84
86
88
90
92
94
96
98
100
102
104
106
108
110
112
114
116
118
120
122

答案 1 :(得分:0)

我认为您可以从列表理解中受益匪浅,请考虑以下因素:

[str(i) for i in range(1,123) if i%2 == 0]

它创建一个字符串序列。然后,您可以继续进行加入连接。

完整示例

with open('log1.txt', 'w') as f:
    f.write('\n'.join([str(i) for i in range(1,123) if i%2 == 0]))