我正在编写一个代码来在文件夹中的多个文件上运行脚本。我能够在每个文件上运行代码,但它只保存到一个输出文件,然后重写该文件。如何获取此代码以将输出保存到单独的文件?优选地,每个原始文件具有相似的名称。这就是我到目前为止所做的。
import os, re
import pandas as pd
directory = os.listdir('C:/Users/user/Desktop/NOV')
os.chdir('C:/Users/user/Desktop/NOV')
for file in directory:
df = pd.read_csv(file, index_col="DateTime", parse_dates=True)
df = df.resample('1min').mean()
df = df.reindex(pd.date_range(df.index.min(), df.index.max(), freq="1min"))
df.to_csv("newfile.csv", na_rep='NaN')
答案 0 :(得分:1)
只需在循环的每次迭代中更改最后一行中的文件名。
像for i, file in enumerate(directory):
然后df.to_csv("new_" + file + ".csv", na_rep='NaN')
之类的东西就可以了。
答案 1 :(得分:1)
好吧,显然它总是会写入同一个文件,因为你总是在to_csv
中给出相同的文件名。使用os.path.basename
根据旧文件名创建一个没有扩展名的新文件名:
df.to_csv(os.path.basename(file) + "-processed.csv", na_rep='NaN')
答案 2 :(得分:1)
我的方法:
glob.glob
代替os.listdir
来过滤掉不是csv
个文件的文件os.chdir
,这是不好的做法,因为其他模块可能不知道您更改了当前目录,也改变了dir两次因为相对将失败,使用glob.glob
很好避免这样做。"new_"
前缀的文件(运行两次会创建"new_new_
文件,但是)代码:
import os, re, glob
import pandas as pd
input_dir = 'C:/Users/user/Desktop/NOV'
for file in glob.glob(os.path.join(input_dir,"*.csv")):
df = pd.read_csv(file, index_col="DateTime", parse_dates=True)
df = df.resample('1min').mean()
df = df.reindex(pd.date_range(df.index.min(), df.index.max(), freq="1min"))
new_filename = os.path.join(input_dir,"new_"+os.path_basename(file))
df.to_csv(new_filename, na_rep='NaN')