所以我正在编写一个脚本来获取大型csv文件并将它们分成块。这些文件都有相应格式的行:
01/07 / 2003,1545,12.47,12.48,12.43,12.44,137423
第一个字段是日期。右边的下一个字段是时间值。这些数据点是微小的粒度。我的目标是用8天的数据填充文件,所以我想将文件中的所有行写入8天,然后写入新文件。
现在,我只看到程序每个" chunk写一行,"而不是所有的线条。下面显示的代码和截图包括显示块目录的制作方式以及文件及其内容。
作为参考,显示的第8天和1559表示它在mod运算符变为true之前存储了最后一行。所以我认为一切都被覆盖了,因为只存储了最后的值。
import os
import time
CWD = os.getcwd()
WRITEDIR = CWD+"/Divided Data/"
if not os.path.exists(WRITEDIR):
os.makedirs(WRITEDIR)
FILEDIR = CWD+"/SP500"
os.chdir(FILEDIR)
valid_files = []
filelist = open("filelist.txt", 'r')
for file in filelist:
cur_file = open(file.rstrip()+".csv", 'r')
cur_file.readline() #skip first line
prev_day = ""
count = 0
chunk_count = 1
for line in cur_file:
day = line[3:5]
WDIR = WRITEDIR + "Chunk"
cur_dir = os.getcwd()
path = WDIR + " "+ str(chunk_count)
if not os.path.exists(path):
os.makedirs(path)
if(day != prev_day):
# print(day)
prev_day = day
count += 1
#Create new directory
if(count % 8 == 0):
chunk_count += 1
PATH = WDIR + " " + str(chunk_count)
if not os.path.exists(PATH):
os.makedirs(PATH)
print("Chunk count: " + str(chunk_count))
print("Global count: " + str(count))
temp_path = WDIR +" "+str(chunk_count)
os.chdir(temp_path)
fname = file.rstrip()+str(chunk_count)+".csv"
with open(fname, 'w') as f:
try:
f.write(line + '\n')
except:
print("Could not write to file. \n")
os.chdir(cur_dir)
if(chunk_count >= 406):
continue
cur_file.close()
# count += 1
答案 0 :(得分:1)
答案在评论中,但让我在这里给出答案,以便回答你的问题。
您正在以'w'
模式打开文件,该模式会覆盖以前写入的所有内容。您需要在'a'
(追加)模式下打开它:
fname = file.rstrip()+str(chunk_count)+".csv"
with open(fname, 'a') as f:
在Python documentation中查看有关open
功能和模式的更多信息。它特别提到了'w'
模式:
请注意'w +'会截断文件