[英]Running python code on multiple files in folder and writing them to separate files
我正在研究在文件夹中的多个文件上运行脚本的代码。 我可以在每个文件上运行代码,但是它仅保存到一个输出文件,然后重写该文件。 如何获得此代码以将输出保存到单独的文件? 最好使用与每个原始文件相似的名称。 到目前为止,这就是我所拥有的。
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')
只需在循环的每次迭代的最后一行更改文件名。 类似于for i, file in enumerate(directory):
然后df.to_csv("new_" + file + ".csv", na_rep='NaN')
将df.to_csv("new_" + file + ".csv", na_rep='NaN')
。
好吧,很显然它将始终写入同一文件,因为您总是在to_csv
提供相同的文件名。 使用os.path.basename
基于旧文件名创建一个新文件名,不带扩展名:
df.to_csv(os.path.basename(file) + "-processed.csv", na_rep='NaN')
我的方法:
glob.glob
而不是os.listdir
过滤掉不是csv
文件的文件 os.chdir
,这是一种不好的做法,因为其他模块可能不知道您更改了当前目录,并且两次更改了dir都会导致相对失败,因此使用glob.glob
可以避免这种情况。 "new_"
的文件(运行两次将创建"new_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')
您在for循环中引用的“文件”应该是您在目录中操作的文件的字符串。
for file in directory:
print file
#oldfile.csv
您可以使用它来创建一个参考原始文件的新文件。 像这样:
for file in directory:
df.to_csv("Output -" + file, na_rep='NaN') #make this the last line of your for-loop.
#File will be called 'Output - oldfile.csv'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.