保存在循环python / pandas

时间:2015-08-03 09:49:09

标签: python pandas

我使用以下代码行来循环文件夹中的不同文件:

import os

files_in_folder_1 = [os.path.join(path1, f) for f in os.listdir(path1) if os.path.isfile(os.path.join(path1, f))]

files_in_folder_2 = [os.path.join(path2, f) for f in os.listdir(path2) if os.path.isfile(os.path.join(path2, f))]

for file1, file2 in zip(files_in_folder_1, files_in_folder_2):
    with open(file1) as f1, open(file2) as f2:

        dftask = pd.read_csv(file2)
        dfresource = pd.read_csv(file1)

在所有操作结束时,我想使用相同的文件名将文件保存在另一个目录中。但是我应该怎么做?我用这个:

dftask.to_csv(r'path\file1.csv')
dfresource.to_csv(r'path\file2.csv')

但是当使用这行代码时csv。文件在循环内不断覆盖所有文件。

解决方案是什么?

4 个答案:

答案 0 :(得分:2)

os.path.basename会为您提供文件名,只需将其加入新路径并保存即可:

new_dir = "path/to/dir/"
for file1, file2 in zip(files_in_folder_1, files_in_folder_2):
    dftask = pd.read_csv(file2)
    dfresource = pd.read_csv(file1)
    # work on df's  .......

    # save to new dir   
    dftask.to_csv(os.path.join(new_dir,os.path.basename(file2)))
    dfresource.to_csv(os.path.join(new_dir,os.path.basename(file1)))

如果您使用file.open首先打开文件,可以从.name属性中获取名称:

new_dir = "path/to/dir/"
for file1, file2 in zip(files_in_folder_1, files_in_folder_2):
    with open(file1) as f1, open(file2) as f2:
        dftask = pd.read_csv(file2)
        dfresource = pd.read_csv(file1)

    dftask.to_csv(os.path.join(new_dir, file2.name))
    dfresource.to_csv(os.path.join(new_dir,file1.name))

答案 1 :(得分:0)

据我了解您的问题,您可以使用'path\' + file1.name.split("/")[-1]保存所有原始名称的文件。

答案 2 :(得分:0)

当循环退出file1file2时,使用上面的代码,每个代码都包含循环最后一次迭代的单个DataFrame。

如果要整合所有DataFrame,应创建包含每个单独DataFrame的列表并将其连接起来。

import os

files_in_folder_1 = [os.path.join(path1, f) for f in os.listdir(path1) if os.path.isfile(os.path.join(path1, f))]

files_in_folder_2 = [os.path.join(path2, f) for f in os.listdir(path2) if os.path.isfile(os.path.join(path2, f))]

dftask_list = []
dfresource_list = []
for file1, file2 in zip(files_in_folder_1, files_in_folder_2):
    with open(file1) as f1, open(file2) as f2:

        dftask_list.append(pd.read_csv(file2))
        dfresource_list.append(pd.read_csv(file1))

dftask = pd.concat(dftask_list)
dfresource = pd.concat(dfresource_list)

注意:您可能需要在此之后重置索引。

dftask = dftask.reset_index(drop=True)
dfresource = dfresource.reset_index(drop=True)

答案 3 :(得分:0)

您可以使用os.path.split(),该函数返回一个元组,其中第二个元素是文件名。示例 -

f1name = os.path.split(file1)[1]
f2name = os.path.split(file2)[1]

然后您可以使用os.path.join()将其与其他目录连接起来并获取结果路径。示例 -

file1newpath = os.path.join(otherdir, os.path.split(file1)[1])
file2newpath = os.path.join(otherdir, os.path.split(file2)[1])

然后您可以使用上述名称保存文件 -

dftask.to_csv(file1newpath)
dfresource.to_csv(file2newpath)

os.path.split() -

的演示
>>> import os.path
>>> os.path.split(r'C:\Users\temp\somedir\somefile.csv')[1]
'somefile.csv'