我收到的反馈错误消息似乎无法解决。我有一个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文件中,我尝试将反斜杠更改为正斜杠,双斜线等。我仍然收到错误消息。是因为数据是用括号返回的吗?如果是这样,我该如何剥离这些?
答案 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}}