Errno 22在python中对字典值使用shutil.copyfile时

时间:2017-09-12 19:36:52

标签: python-2.7 dictionary

我收到的反馈错误消息似乎无法解决。我有一个csv文件,我正在尝试阅读并根据它们所在的县生成pdf文件。如果该县只有一个地图,那么我不需要附加文件(代码TBD一旦这个障碍被解决为我确信在使用pyPDF2时我会遇到与代码相同的问题,并希望简单地将地图复制到具有新名称的新目录。 shutil.copyfile似乎不认为该路径对于符合执行此命令的条件的County3有效。

Map.csv文件

County  Maps
County1 C:\maps\map1.pdf
County1 C:\maps\map2.pdf
County2 C:\maps\map1.pdf
County2 C:\maps\map3.pdf
County3 C:\maps\map3.pdf
County4 C:\maps\map2.pdf
County4 C:\maps\map3.pdf
County4 C:\maps\map4.pdf

我的代码:

import csv, os
import shutil
from PyPDF2 import PdfFileMerger, PdfFileReader, PdfFileWriter

merged_file = PdfFileMerger()
counties = {}
with open(r'C:\maps\Maps.csv') as csvfile:
    reader = csv.reader(csvfile, delimiter=",")
    for n, row in enumerate(reader):
        if not n:
            continue
        county, location = row
        if county not in counties:
            counties[county] = list()
        counties[county].append((location))
    for k, v in counties.items():
        newPdfFile = ('C:\maps\Maps\JoinedMaps\County-' + k +'.pdf')
        if len(str(v).split(',')) > 1:
            print newPdfFile
        else:
            shutil.copyfile(str(v),newPdfFile)
            print 'v: ' + str(v)

反馈讯息:

C:\maps\Maps\JoinedMaps\County-County4.pdf
C:\maps\Maps\JoinedMaps\County-County1.pdf
v: ['C:\\maps\\map3.pdf']
Traceback (most recent call last):
  File "<module2>", line 22, in <module>
  File "C:\Python27\ArcGIS10.5\lib\shutil.py", line 82, in copyfile
    with open(src, 'rb') as fsrc:
IOError: [Errno 22] invalid mode ('rb') or filename: "['C:\\\\maps\\\\map3.pdf']"

csv文件中没有空行。在csv文件中,我尝试将反斜杠更改为正斜杠,双斜线等。我仍然收到错误消息。是因为数据是用括号返回的吗?如果是这样,我该如何剥离这些?

1 个答案:

答案 0 :(得分:0)

您实际上是在尝试创建文件IOError: [Errno 22] invalid mode ('rb') or filename: "['C:\\\\maps\\\\map3.pdf']",您可以告诉它,因为错误消息显示了它尝试创建的文件名:

shutil.copyfile(str(v),newPdfFile)

这个值来自于你要转换为字符串的事实,这是字典键的值,这是一个列表:

v

您需要做的是检查列表是否包含多个成员,然后单步执行列表中的每个成员(for k, v in counties.items(): newPdfFile = (r'C:\maps\Maps\JoinedMaps\County-' + k +'.pdf') if len(v) > 1: print newPdfFile else: for filename in v: shutil.copyfile(filename, newPdfFile) print('v: {}'.format(filename)) )并复制文件。

{{1}}