Python 循环内的循环并发性
我有一个从txt文件调用信息的程序。文本文件中的每一行对应于不同目录中的整个文件。我想从txt文件(第1行)中读取信息,并将其与目录(文件1)中相应文件的信息一起写入输出文件。我需要我的代码来处理多个文件。如何使每个循环相互对应以产生正确的输出Python 循环内的循环并发性,python,loops,concurrency,while-loop,Python,Loops,Concurrency,While Loop,我有一个从txt文件调用信息的程序。文本文件中的每一行对应于不同目录中的整个文件。我想从txt文件(第1行)中读取信息,并将其与目录(文件1)中相应文件的信息一起写入输出文件。我需要我的代码来处理多个文件。如何使每个循环相互对应以产生正确的输出 import datetime import glob f = open('\\_spec_final.t15', 'w') infofile = open('info.txt', 'rt') num_lines = sum(1 for line in
import datetime
import glob
f = open('\\_spec_final.t15', 'w')
infofile = open('info.txt', 'rt')
num_lines = sum(1 for line in 'info.txt')
count = 0
while count <= num_lines
for line in infofile:
lat = float(line[88:94])
lon = float(line[119:127])
year = int(line[190:194])
month = int(line[195:197])
day = int(line[198:200])
hour = int(line[201:203])
minute = int(line[204:206])
second = int(line[207:209])
dur = float(line[302:315])
numpoints = float(line[655:660])
fov = line[481:497] # field of view?
sza = float(line[418:426])
snr = 0.0000
roe = 6396.2
res = 0.5000
lowwav = float(lowwav)
highwav = float(highwav)
spacebw = (highwav - lowwav)/ numpoints
d = datetime.datetime(year, month, day, hour, minute, second)
f.write('{:>12.5f}{:>12.5f}{:>12.5f}{:>12.5f}{:>8.1f}'.format(sza,roe,lat,lon,snr)) # line 1
f.write("\n")
f.write('{:>10d}{:>5d}{:>5d}{:>5d}{:>5d}{:>5d}'.format(year,month,day,hour,minute,second)) # line 2
f.write("\n")
f.write( ('{:%Y/%m/%d %H:%M:%S}'.format(d)) + "UT Solar Azimuth:" + ('{:>6.3f}'.format(sza)) + " Resolution:" + ('{:>6.4f}'.format(res)) + " Duration:" + ('{:>6.2f}'.format(dur))) # line 3
f.write("\n")
f.write('{:>21.13f}{:>26.13f}{:>24.17e}{:>12f}'.format(lowwav,highwav,spacebw,numpoints)) # line 4
f.write("\n")
path = '/Users/140803/*'
files = glob.glob(path)
for file(count) in files:
g = open(file, 'r')
#do stuff
g.close()
f.close()
infofile.close()
导入日期时间
导入glob
f=开放('\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
infofile=open('info.txt','rt')
num_lines=sum(对于'info.txt'中的行为1)
计数=0
运行files=glob.glob(path)
后计数,files
包含文件名字符串列表。在files:
中为文件运行时,变量file
将包含字符串文件名。因此,可以按如下方式修改循环:
for file in files:
with open(file) as g: #<--- file is the filename
#do stuff
对于文件中的文件:
根据对话,将open(file)设置为g:#,似乎根本不需要内部循环。您有多个不需要存在的嵌套循环。我已经重写了部分代码,但没有在这里使用它们
具体地说,如果您想迭代某个对象并同时对其进行计数,请执行以下操作
for count in range(3):
for item in iterator:
print("%d %s" % (count, item))
0 item1
0 item2
0 item3
1 item1
1 item2
1 item3
2 item1
2 item2
2 item3
这些循环的输出类似于
for count in range(3):
for item in iterator:
print("%d %s" % (count, item))
0 item1
0 item2
0 item3
1 item1
1 item2
1 item3
2 item1
2 item2
2 item3
需要的是枚举
函数,它在迭代器旁边运行一个计数器:
for count, item in enumerate(iterator):
print("%d %s" % (count, item))
这会打印出来
0 item1
1 item2
2 item3
此外,我还替换了所有open()。。。close()
构造为构造为…
:
import datetime
import glob
path = '/Users/140803/*'
files = glob.glob(path)
with open('\\_spec_final.t15', 'w') as f:
with open('info.txt', 'rt') as infofile:
for count, line in enumerate(infofile):
lat = float(line[88:94])
lon = float(line[119:127])
year = int(line[190:194])
month = int(line[195:197])
day = int(line[198:200])
hour = int(line[201:203])
minute = int(line[204:206])
second = int(line[207:209])
dur = float(line[302:315])
numpoints = float(line[655:660])
fov = line[481:497] # field of view?
sza = float(line[418:426])
snr = 0.0000
roe = 6396.2
res = 0.5000
lowwav = float(lowwav)
highwav = float(highwav)
spacebw = (highwav - lowwav)/ numpoints
d = datetime.datetime(year, month, day, hour, minute, second)
f.write('{:>12.5f}{:>12.5f}{:>12.5f}{:>12.5f}{:>8.1f}'.format(sza,roe,lat,lon,snr)) # line 1
f.write("\n")
f.write('{:>10d}{:>5d}{:>5d}{:>5d}{:>5d}{:>5d}'.format(year,month,day,hour,minute,second)) # line 2
f.write("\n")
f.write( ('{:%Y/%m/%d %H:%M:%S}'.format(d)) + "UT Solar Azimuth:" + ('{:>6.3f}'.format(sza)) + " Resolution:" + ('{:>6.4f}'.format(res)) + " Duration:" + ('{:>6.2f}'.format(dur))) # line 3
f.write("\n")
f.write('{:>21.13f}{:>26.13f}{:>24.17e}{:>12f}'.format(lowwav,highwav,spacebw,numpoints)) # line 4
f.write("\n")
with open(files[count], 'r') as g:
#do stuff (to g presumably)
虽然在文件上使用计数器实际上可能是您想要的,但我发现这极不可能。我认为您实际上是在尝试根据刚刚加载的信息生成一个文件名并打开它。globbing的问题是,它甚至不能保证在同一程序的两次不同运行之间以相同的顺序返回结果。谢谢,但我不希望它同时运行所有文件,我希望它运行一个,然后返回到它嵌套的循环,从txt文件中读取另一行,然后执行此循环(所以我认为计数器可以使两个循环保持在同一个任务上,但不知道如何做到这一点)好的,在这种情况下,请通读整个“txt文件”,并将这些文件保存到文件列表中。然后运行这个循环,它将遍历每一个文件。我不确定当您在文本文件中有要打开的文件名时,为什么要依赖glob
。吹毛求疵,但您应该使用open(file)执行作为g:…
而不是g=open(file)….g.close()
@alli。既然如此,为什么要使用内部循环?如果要对外部循环的迭代执行单个操作,请执行该操作。@alli请稍候。我正在发布一些解决您基本问题的内容。我编辑了这篇文章以添加python标记,这将让正确的人看到它。没问题。我希望这有助于你思考循环做得更清楚以及解决你当前的问题。考虑给出一个赞成的问题:我正在更新这个代码,我希望它以同样的方式迭代计数,但不是一个接一个地打印信息,我希望它能把信息写入文件,然后在返回到第二次计数时覆盖它。有这样做的提示吗?是的,请另问一个问题。