python - 有选择地将文件从一个文件夹目录复制到另一个
问题描述
我有一个目录树,其中文件夹的名称很重要。我也有一个来自folder1>folder2>folder3>foo.txt的csv说。folder1,folder2,folder3 和 txt 都在 csv 的不同列中。我需要保持目录结构不变并复制 csv 中给出的文件。
我正在尝试的方法是复制目录树并编写 python 代码来删除不需要的文件。所以有很多循环,但我在 csv 中有超过 415,000 行。
csv example:<br/>
pdf_no . folder1. folder2 . folder3. <br/> 1 . . abc. pqr. xyz.<br/>
这是 csv 的格式,我在 python 中借助 pandas 数据框提取列数据没有问题。最初它是一个 .dta 文件,我转换为.csv with pandas. So 'folder1' > 'folder 2' > 'folder 3' > 'pdf_no'.
“pdf_no”。列包含文件名,这是我们想要在给定文件夹中维护文件结构的数字。
所以这需要很多时间,每当我再次改变一点时,它都会花费很多时间,我什至不知道它是否正确。
解决方案
样本 csv
pdf_no,folder1,folder2,folder3
1,abc,def,ghi
2,xyz,pqr,
3,abc,def,ghi
示例代码
import csv
import os
import shutil
target_csv = 'selection.csv'
target_dir = 'selected_20190828/'
source_dir = 'original_directory/'
with open(target_csv) as f:
rows = csv.reader(f)
for line_no, row in enumerate(rows):
if line_no == 0: # Skip the first line because it's the title
continue
pdf_name = row[0] + '.pdf'
dir_path = os.path.join(*row[1:])
source = os.path.join(source_dir, dir_path, pdf_name)
if not os.path.isfile(source):
print('not exist: ', line_no, source)
continue
target = os.path.join(target_dir, dir_path)
os.makedirs(target)
shutil.copy2(source, target)
解释
pandas
其实你不需要,你只需要
csv.reader
将 csv 文件读入list
os.makedirs
创建文件夹(此方法类似于mkdir -p
bash)os.path.join
shutil.copy2
将文件复制到新文件夹os.path.isfile
确保原始文件存在
我已经测试了上面的代码。它应该工作。
推荐阅读
- python - Python - ValueError:找到暗淡3的数组。估计器预期<= 2
- angular - 错误 NG6002:出现在 AppModule 的 NgModule.imports 中,但无法解析为 NgModule 类。是否缺少@NgModule 注释?
- html - 垂直对齐不适用于 React.js 中的 React 图标
- api - 如何从 Power BI 中的 API 获取所有数据
- reactjs - 如何创建一个设置异步侦听器的反应挂钩?
- python - 索引更改不适用于新的 DataFrame
- javascript - vite 中的 Node.js 核心模块作为 webpack 后备
- android - 评估项目“:@mauron85_react-native-background-geolocation-common”时出现问题
- amazon-web-services - 如附图所示,如何在我的账户中获取 S3 存储桶信息?
- python - 试图重新组织 csv lat lon