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