我有一个 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()
. 那么如何将此缓冲区放入文件中?或者,更好的是,我只是在这里错过了一些步骤吗?谢谢!