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 に答える