URLのリストがあります。それらを繰り返し処理し、URL ごとに各 .zip ファイルをダウンロードして保存します。次に、このファイルを辞書に入れる必要がありますが、 で始まるすべての行をスキップしたい#
. (ファイルに上書きすることで同様の問題を解決しましたfilter
が、ここではそのアプローチを使用できません。)ここに私のコードがあります:
1. for link in urls:
2. affy_reader = {}
3.
4. # get_data() downloads the file, saves it as a .csv.zip, and
5. # returns a pointer to the file.
6.
7. n = get_data(link)
8. z = zipfile.ZipFile(n)
9.
10. # only want the .csv from the archive
11. for name in z.namelist():
12. if '.csv' in name:
13. print('Writing - ' +name)
14. fp = open(name, 'wb+')
15. fp.write(z.read(name))
16. fp.close()
17.
18. with(open(fp, 'r')) as f: # open file A to read only
19. with(open('temp.txt', 'w+')) as file_p: # open file B to read AND write
20. for row in f:
21. if not row.startswith('#'):
22. file_p.write(row)
23. file_p.close()
26. affy_reader = csv.DictReader(fd,
27. delimiter='\t',
28. fieldnames=affy_column_headers)
30. for x in affy_reader:
31. print(x)
ご覧のとおり、18 行目で元のファイル A を開こうとし、必要な行だけを別のファイル B に書き出してから、B をDictReader
. これが私が返すエラーです:
TypeError: invalid file: <_io.BufferedRandom name='HG-U133A.na33.annot.csv'>
そのfp = open(name, 'wb+')
ため、ファイルではなく、文字列バッファーのように見えます。ただし、Python のドキュメントによるとfile object
、open()
. では、このバッファをファイルに入れるにはどうすればよいでしょうか? または、さらに良いことに、ここでいくつかのステップが欠落していますか? ありがとう!