我发现了类似的问题,并尝试了内部提出的解决方案,似乎没有解决我的问题。我试图做的实质上是将数据从一个文件复制到另一个文件,即使它没有错误我们已经验证'line'变量是一个字符串并包含正确的数据,它根本不写入文件。我目前正在使用python 2.7。
我试图添加.flush(),因为其他一些解决方案没有成功。我已经验证过如果我在第一个for循环之前写一个静态字符串,它实际上写入该文件。我的怀疑是它与两个文件打开并迭代其中一个有关,但我不确定这个有效性。
with open("data/data.csv", 'w+') as data_file, open("data/raw/" + data_point + ".csv", 'r') as raw_file:
for line in raw_file:
line = line.split(',')
temp_date = datetime(int(line[0]), int(line[1]), int(line[2]))
if newest_date == datetime(1,1,1):
newest_date = temp_date
if temp_date < oldest_date:
oldest_date = temp_date
sorted_raw = [[float(line[4]), float(line[5])]] + sorted_raw
raw_file.seek(0) # reset read pointer
for line in raw_file:
data_file.write(line)
编辑:我现在意识到我的愚蠢。我有一个第二个未完成的函数,基本上是一个修改过的复制粘贴,但没有写入。打开文件的“w +”方法每次都清除它,因为第二个函数总是在这段代码完成后立即调用,所以我永远无法捕获写入的文件。我为噪音道歉
答案 0 :(得分:1)
您可以在第一个循环中写入数据文件。
with open("data/data.csv", 'w+') as data_file, open("data/raw/" + data_point + ".csv", 'r') as raw_file:
for line in raw_file:
line = line.split(',')
temp_date = datetime(int(line[0]), int(line[1]), int(line[2]))
if newest_date == datetime(1,1,1):
newest_date = temp_date
if temp_date < oldest_date:
oldest_date = temp_date
sorted_raw = [[float(line[4]), float(line[5])]] + sorted_raw
data_file.write(line)