0

我正在为来自 CDC 的 NHANES 数据集编写数据抓取工具。我在使用文件 IO 时遇到问题。

给定年份、组和标题(例如 2000、“exam”、“Audiometry”),我创建文件名字符串:

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

4

2 回答 2

2

文件名中的\r可能到达那里,因为它已经存在于您从中创建文件名的数据中。特别是titles[i]。如果您向我们展示填充该数组的代码,我们也许能够提供更好的解决方案。

在此期间的解决方法如下:

filename = "nhanes.%d-%d.%s.%s.xpt" % (year, year+1, group titles[i].strip())

您的问题的实际解决方案是调用strip将摆脱回车符的字符串方法(这\r就是所谓的)。请注意,该strip方法还将摆脱其他字符(主要是空格)。

对代码的其他更改只是 - 在我看来 - 编写与您编写的相同内容的更好方法。您实际上不是连接子字符串,而是使用内置字符串格式来创建文件名。最终结果应该是一样的。

于 2012-08-07T22:32:19.110 回答
0

年、组、题名的内容从何而来?\r 是一个回车符,所以我建议你清理它们以确保删除所有这些字符,无论是在填充列表时,还是在使用它们时。

filename = "nhanes."+str(year)+"-"+str(year+1)+"."+group+"."+titles[i].strip("\r")+".xpt"
于 2012-08-07T22:40:26.893 回答