我使用以下代码行来循环文件夹中的不同文件:
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。文件在循环内不断覆盖所有文件。
解决方案是什么?
答案 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)
当循环退出file1
和file2
时,使用上面的代码,每个代码都包含循环最后一次迭代的单个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'