Python 每次迭代都会替换上一次?
最后一行给出了: ValueError:对关闭的文件执行I/O操作 如何解决这些问题 关于第一个问题,txt中只打印最后一个插入,而它应该显示所有插入 -更新Python 每次迭代都会替换上一次?,python,Python,最后一行给出了: ValueError:对关闭的文件执行I/O操作 如何解决这些问题 关于第一个问题,txt中只打印最后一个插入,而它应该显示所有插入 -更新 folder = path.Path(r"C:\Users\user\Desktop\SHAPE") shapefiles = [] for shpfile in glob.iglob('**/Desktop/SHAPE/**/' ,recursive = True): try: shapefiles.append
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吗?正确的结果应该是:
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
我认为你可以从列表理解中获益匪浅,请考虑下面的内容:
[str(i) for i in range(1,123) if i%2 == 0]
它创建一个字符串序列。然后你可以继续用join来搞定它
完整示例
with open('log1.txt', 'w') as f:
f.write('\n'.join([str(i) for i in range(1,123) if i%2 == 0]))
你想达到什么目标?只需在文件中写入一些偶数?如果是这样:
以open('filename.txt','w')作为file:file.write('some text')
应该可以开始了。忘记sys.stdout
。您不必每次遇到偶数时都打开文件。改用a,然后在那里完成所有工作。我刚刚更正了OP的代码,实际上它不是我的代码。你能写下如何解决更新代码中出现的更困难的情况吗?@user10154844你可以随时使用open('log.txt'))然后用上面的例子把你的日志写进去。如果你用w替换“a”,你会发现用“w”替换的是正确的,而用“a”替换的结果非常奇怪。检查此outa意味着追加,w写入。如果文件存在,则覆盖文件如果存在,则“a”只是附加项,否则创建。我认为正确地考虑你想要的,并使用正确的打开文件模式。看看:在这样的任务中使用列表理解是有效的吗?如果数据量太大怎么办?你能告诉我如何使用问题中的更新代码吗?为什么不仅仅是range(2123,2)
?@hiroprotation这是一个很好的问题。但是这个例子展示了如何在列表中使用if语句。可能有更多的条件需要满足,那么这一步骤是不够的。
with open('log1.txt', 'w') as f:
f.write('\n'.join([str(i) for i in range(1,123) if i%2 == 0]))