2

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 objectopen(). では、このバッファをファイルに入れるにはどうすればよいでしょうか? または、さらに良いことに、ここでいくつかのステップが欠落していますか? ありがとう!

4

0 に答える 0