Python IO:在open()期间向文件名添加字符

2024-09-30 12:23:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为CDC的NHANES数据集编写一个数据刮板。文件IO有问题。在

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

filename = "nhanes."+str(year)+"-"+str(year+1)+"."+group+"."+titles[i]+".xpt"

成功打印为

^{pr2}$

然后,我使用以下代码在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”:(有什么想法吗?谢谢您!!~艾米莉


Tags: 文件数据文件名responseftpurllib2filenameyear
2条回答

年度、组别、职称表的内容从何而来?\r是一个回车符,所以我建议您对它们进行清理,以确保删除所有这样的字符,无论是在填充列表时,还是在使用它们时。在

filename = "nhanes."+str(year)+"-"+str(year+1)+"."+group+"."+titles[i].strip("\r")+".xpt"

文件名中的\r可能是因为它已经存在于创建文件名的数据中。尤其是titles[i]。如果您向我们展示填充该数组的代码,我们可能会提供更好的解决方案。在

同时,解决方法如下:

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

这个问题的实际解决方案是调用字符串的strip方法,该方法将去掉回车符(\r被调用)。注意,strip方法也将删除其他字符(whitespace mostly)。在

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

相关问题 更多 >

    热门问题