python - 使用 CSV 和 glob 重命名文件

标签 python

我正在寻找一个脚本来重命名我拥有的所有基于 .CSV 文件的 PDF 文件,并且它们需要匹配。

CSV 文件有这样的数字:

P20084579
P10092865
P10147356
P20154177
P10028030
P10058367
P10122918
P10122478
P20008810
P10029609
P20015658

PDF 文件的命名方式如下:

All_C_2017.1.pdf
All_C_2017.2.pdf
All_C_2017.3.pdf
All_C_2017.4.pdf
All_C_2017.5.pdf
All_C_2017.6.pdf
All_C_2017.7.pdf
All_C_2017.8.pdf
All_C_2017.9.pdf
All_C_2017.10.pdf
All_C_2017.11.pdf

等等,CSV 文件的第一个数字 (P20084579) 与 All_C_2017.1.pdf 等等,所以我想将所有这些数字重命名为 P20084579.pdf

我了解如何读取 CSV 文件和 glob

f =  open('Test Names.csv', 'rb')
reader = csv.reader(f)
for row in reader:
    print row[0]

pdf = glob.glob('*.pdf')
for pdfname in pdf:
    print pdfname 

我希望我可以用 OS.rename() 模块做一些事情来产生一个循环

os.rename(pdfname,row[0])

但是当我使用 GLOB 列出目录时 像这样列出,所以如果我尝试使用这种方法,它会错误地重命名文件:

    All_C_2017.1.pdf
    All_C_2017.10.pdf
    All_C_2017.11.pdf
    All_C_2017.2.pdf
    All_C_2017.3.pdf
    All_C_2017.4.pdf
    All_C_2017.5.pdf
    All_C_2017.6.pdf
    All_C_2017.7.pdf
    All_C_2017.8.pdf
    All_C_2017.9.pdf

有什么建议吗?

最佳答案

只需 zip(交错)两个结果(来自 glob.globcsv.reader)并在循环中重命名文件:

with open('Test Names.csv', 'r') as f:
    for pdfname,row in zip(glob.glob('*.pdf'),csv.reader(f)):
        os.rename(pdfname,row[0]+".pdf")

注意事项:

  • 它可以使用智能解包 (new_basename,) 直接从 csv 文件中提取第一行(也是唯一一行),但它似乎存在更多列,所以算了吧。
  • 如果.csv 文件的长度不够,重命名将停止。最好确保大小相等。该操作可能难以撤消。

安全(r)版本:

with open('Test Names.csv', 'r') as f:
    pdfs = glob.glob('*.pdf')
    reader = list(csv.reader(f))
    if len(pdfs)!=len(reader):
       raise Exception("Length mismatch")

    for pdfname,row in zip(pdfs,reader):
        os.rename(pdfname,row[0]+".pdf")

关于python - 使用 CSV 和 glob 重命名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41875632/

相关文章:

Python:获取具有格式的网站的所有网址

python - 使用scrapy从无限滚动页面中抓取数据

Python子进程没有属性 "check_output"

python - Django 应用程序初始化代码(如连接到信号)

python - 属性错误 : module 'tensorflow_core.compat.v1' has no attribute 'contrib'

python - Django 反向 m2m 查询

python - 在函数体内更改函数的属性?

python - 努力从Python中的csv文件中提取列数据

python - SQLite 日期类型 查询网站数据库时出错

python - 将csv.DictReader对象转换为非iter类型数据并按键合并值