Python IO:在open()期间向filename添加字符

时间:2012-08-07 22:10:20

标签: python file-io ftp io

我正在为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

2 个答案:

答案 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"