我正在为CDC的NHANES数据集编写数据抓取器。我的文件IO有问题。
鉴于一年,一组和一个标题(例如2000,“考试”,“听力测定”),我创建了文件名字符串:
filename = "nhanes."+str(year)+"-"+str(year+1)+"."+group+"."+titles[i]+".xpt"
成功打印出
"nhanes.2000-2001.exam.Audiometry.xpt"
然后我使用以下代码在ftp服务器上下载.xpt文件:
req = urllib2.Request(ftp_loc)
response = urllib2.urlopen(req)
xpt_data = response.read()
f = open(filename, 'w')
f.write(xpt_data)
f.close()
ftp_loc 类似于“ftp://ftp.cdc.gov/pub/Health_Statistics/NCHS/nhanes/2001-2002/OHXPRL_B.xpt”
然后,问题:我收到错误消息
Traceback (most recent call last):
(... method stack here ...)
IOError:[Errno 22] invalid mode ('w') or filename: 'nhanes.2000-2001.exam.Audiometry\r.xpt'
正如你所看到的,文件名现在里面有一个“\ r”:(有关它如何到达的任何想法?谢谢!~Emily
答案 0 :(得分:2)
文件名中的\r
可能已经到达,因为它已经存在于您创建文件名的数据中。特别是titles[i]
。如果您向我们展示填充该阵列的代码,我们可以提供更好的解决方案。
同时解决方法如下:
filename = "nhanes.%d-%d.%s.%s.xpt" % (year, year+1, group titles[i].strip())
您的问题的实际解决方案是调用字符串的strip
方法,该方法将删除回车符(即\r
被调用的内容)。请注意,strip
方法也会删除其他字符(whitespace mostly)。
代码的其他变化只是 - 在我看来 - 是一种更好的方式来编写你写的相同的东西。您实际上使用内置string formatting来创建文件名,而不是连接子字符串。最终结果应该是相同的。
答案 1 :(得分:0)
年份,小组和职衔名单的内容来自哪里? \ r \ n是一个回车符,所以我建议你清理它们以确保删除所有这些字符,无论是填充列表还是使用它们。
filename = "nhanes."+str(year)+"-"+str(year+1)+"."+group+"."+titles[i].strip("\r")+".xpt"