在文件夹中的多个文件上运行python代码并将它们写入单独的文件中

2024-04-27 00:43:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个代码,在一个文件夹中的多个文件上运行脚本。我可以在每个文件上运行代码,但它只是保存到一个输出文件,然后重写该文件。如何让这段代码将输出保存到单独的文件中?最好使用与每个原始文件相似的名称。这就是我目前所拥有的。在

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')

Tags: 文件csv代码import文件夹dfindexos
3条回答

只需在循环的每个迭代的最后一行更改文件名。 类似于for i, file in enumerate(directory):然后df.to_csv("new_" + file + ".csv", na_rep='NaN')的方法就可以了。在

我的方法:

  • 使用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')

显然,它总是写入同一个文件,因为你总是在to_csv中给出相同的文件名。使用os.path.basename在不带扩展名的旧文件名的基础上创建新文件名:

df.to_csv(os.path.basename(file) + "-processed.csv", na_rep='NaN')

相关问题 更多 >