我有一个文件,头部有一个令人讨厌的序言.所以它看起来像这样:
Review performed by:
Meeting:
Person:
Number:
Code:
Confirmation
Tab Separated Header Names That I Want To Use
Run Code Online (Sandbox Code Playgroud)
我想跳过所有内容并使用tab sep头名称作为我的代码.这是我到目前为止:
reader = csv.DictReader(CSVFile)
for i in range(14): #trying to skip the first 14 rows
reader.next()
for row in reader:
print(row)
if args.nextCode:
tab = (row["Tab"])
sep = int((row["Separated"]))
Run Code Online (Sandbox Code Playgroud)
此代码出现此错误:
File "/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/csv.py", line 104, in next
row = self.reader.next()
StopIteration
Run Code Online (Sandbox Code Playgroud)
我试图打印行,看看我在文件中的位置,然后我将"range(14)"更改为5,但是当我打印行时,我得到了这个:
{'Review performed by:': 'Tab/tSeparated/tHeader/tNames/tThat/tI/tWant/tTo/tUse'}
Traceback (most recent call last):
File "program.py", line 396, in <module>
main()
File "program.py", line 234, in main
tab = (row["Tab"])
KeyError: 'Tab'
Run Code Online (Sandbox Code Playgroud)
所以我不确定跳过这些顶线的正确方法.任何帮助,将不胜感激.
jon*_*rpe 15
A csv.DictReader在实例化时从文件中读取第一行,以获取后续行的标题.因此,它Review performed by:用作标题行,然后跳过接下来的14行.
而是在创建之前跳过行DictReader:
for i in range(14):
CSVFile.next()
reader = csv.DictReader(CSVFile)
...
Run Code Online (Sandbox Code Playgroud)
您可以CSVFile使用itertools.islice迭代器对象包装,以在创建时分割前言的行。DictReader,而不是直接将其提供给构造函数。
这是可行的,因为csv.reader构造函数将根据csv docs接受任何“支持迭代器协议并在每次next()调用其方法时返回一个字符串的对象” 。这也适用于,因为它们在内部使用基础实例。csv.DictReaderreader
N = 14 # number of lines to skip
for row in csv.DictReader(itertools.islice(CSVFile, N, None)):
process row ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13900 次 |
| 最近记录: |