我写了一个程序,将几个文本文件合并在一起,从那里,我试图使用for循环向第一列添加日期,因为有几个不同的日期。但是,使用这些循环,程序似乎没有正确迭代。
支持文本文件包含没有日期的时间列表;但是,每个文本文件都与不同的日期相关联。我将所有文本文件合并为一个文本文件以便于使用,但为了使其有用,我尝试将日期添加到文本文件的第一列中显示的时间。
这是代码的样子:
import glob
from datetime import *
mon = [6, 7]
dayrange1 = [24, 25, 26, 27, 28, 29, 30]
dayrange2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
m = 0
d1 = 0
d2 = 0
newline = []
fout = open("C:\\Users\\jessica.macleod\\Desktop\\SurmontArray1.txt", "a")
for filename in glob.glob("C:\\Users\\jessica.macleod\\Desktop\\Surmont Noise Files\\s1-424surmontnoise2012*.txt"):
f = open(filename)
f.next()
f.next()
d1 = 0
d2 = 0
for months in mon:
if m == 0:
for days in dayrange1:
for line in f:
line += str(date(2012, mon[m], dayrange1[d1])) + " "
fout.write(line)
d1 = d1 + 1
m = m + 1
if m == 1:
for days in dayrange2:
for line in f:
line += str(date(2012, mon[m], dayrange2[d2])) + " "
fout.write(line)
d2 = d2 + 1
f.close()
fout.close()
答案 0 :(得分:1)
dayrange1
未在for months in mon
的第二个循环中进行迭代,因为您已将m
设置为1
。它被跳过,因为它受到条件if m == 0:
的保护。这意味着只有glob中第一个匹配的文件名将具有迭代dayrange1
的结果。您需要在其中一个循环中将m
重置为0
。
此外,您在days
中迭代daterange1
。在该循环的第一次迭代期间,您将遍历f
的整个内容。这意味着在daterange1
上的第二次迭代中文件已用完。
此外,您不要在循环中使用days
。
答案 1 :(得分:0)
我认为通过将日期循环与文件名循环相结合,您可以最好地解决迭代问题。这有两种方法,取决于您希望程序的灵活性或确定性:
如果您只需要程序在特定日期工作,您将硬编码到程序中,您应该执行日期循环并直接打开与这些日期对应的文件(没有通配和循环文件名)。
如果您希望程序处理您拥有数据文件的所有日期,则应该删除日期循环以支持glob循环,并解析文件名以获取相关日期。
这是第一种情况的一些未经测试的代码:
from datetime import date
months = [6, 7]
days = { 6 : [24, 25, 26, 27, 28, 29, 30],
7 : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] }
output_filename = "SurmontArray1.txt"
filename_template = "Surmont Noise Files\\s1-424surmontnoise2012%2d%2d.txt"
with open(output_filename, "a") as f_out:
for month in months:
for day in days[month]:
with open(filename_template% (month, day)) as f_in:
date_str = str(date(2012, month, day)) + " "
for line in f_in:
f_out.write(date_str + line)
这是第二种情况的代码:
from datetime import date
import glob
import re
output_filename = "SurmontArray1.txt"
with open(output_filename, "a") as f_out:
filenames = glob.glob("Surmont Noise Files\\s1-424surmontnoise2012*.txt")
for filename in filenames:
year, month, day = re.search(r'(\d\d\d\d)(\d\d)(\d\d)\.txt',
filename).groups()
with open(filename) as f_in:
for line in f_in:
date_str = str(date(year, month, day)) + " "
for line in f_in:
f_out.write(date_str + line)