Python 读取CSV文件时跳过标题

Python 读取CSV文件时跳过标题,python,Python,我正在做一个项目,读取冒号分隔的文件,合并到一个文件中,删除所有字段符合特定条件的记录。输入文件在我需要丢弃的每个文件的顶部有4行。将最终文件输出为以冒号分隔的文件,不包含不需要的记录 这是密码 #!/usr/bin/python import csv import glob import os import sys import datetime import itertools from itertools import islice input_path = "c:\\data\\cu

我正在做一个项目,读取冒号分隔的文件,合并到一个文件中,删除所有字段符合特定条件的记录。输入文件在我需要丢弃的每个文件的顶部有4行。将最终文件输出为以冒号分隔的文件,不包含不需要的记录

这是密码

#!/usr/bin/python
import csv
import glob
import os
import sys
import datetime
import itertools
from itertools import islice


input_path = "c:\\data\\customer files\\project roo\\printer accounting\\data files\\"
output_path = "c:\\data\\customer files\\project roo\\printer accounting\\data files\\output\\"


input_files = os.path.join(input_path, '*.dat')
output_file = os.path.join(output_path,'{:%Y%m%d}-    summary.csv'.format(datetime.datetime.now()))

filewriter = csv.writer(open (output_file, 'w', newline= ''), delimiter= ':')

look_for = set(['Document Name = Microsoft Word - T.DOC'])

for input_file in glob.glob(input_files):
    with open(input_file) as csvfile:
        filereader = csv.reader(csvfile, delimiter= ':')
        for line in itertools.islice(csvfile,4,None):

            for row in filereader:
                #if row[3] in look_for:
                    #filewriter.writerow(none)
                #else:
                    #filewriter.writerow(row)
                print(row[0])
输入文件

Ignore 1
Ignore 2
Ignore 3
Ignore 4
Document Id= 123456 :Container ID=123123 :record status = complete : Document Name = T.DOC : Sender name = george:
Document Id= 789101 :Container ID=123123 :record status = complete : Document Name = form25 : Sender name = george:
Document Id= 121314 :Container ID=123123 :record status = complete : Document Name = ian.doc : Sender name = george:
输出文件应为

 Document ID= 121314 : Container ID=123123: record status = complete : Document Name= ian.doc : Sender Name = george

我使用print命令只是想看看是否可以打印输入文件中的字段,但是我得到了一个索引超出范围的错误。这对我来说意味着输入文件列还没有被索引。我知道在这个主题上有很多问题,但我似乎无法找到解决方案。非常感谢您对filereader中的行的
的任何帮助循环使用
filereader
,但它位于itertools.islice(csvfile,4,None)中的
for行中:
,您实际上没有使用它

这就是它从filereader打印相同数据的原因

    filereader = csv.reader(csvfile, delimiter= ':')
    for line in itertools.islice(csvfile,4,None):

        for row in filereader:
            #if row[3] in look_for:
                #filewriter.writerow(none)
            #else:
                #filewriter.writerow(row)
            print(row[0])
我正在进行一个项目,以读取冒号分隔的文件

[…]输入文件在我需要丢弃的每个文件顶部有4行

在示例代码中,您错误地处理了问题。您应该链接迭代器:

import csv
import itertools

input_file = "test.txt"

with open(input_file) as csvfile:
    src = itertools.islice(csvfile, 4, None)
    for row in csv.reader(src, delimiter= ':'):
        print(row[0])
  • 首先,打开文件。这将返回一个“行迭代器”
  • 然后,使用
    itertools.islice
    放弃迭代器中需要的任何内容。这将返回另一个迭代器,该迭代器仅包含要保留的行
  • 最后,使用后面的迭代器作为CSV解析器的数据源(在“已解析的CSV行”上返回第三个迭代器)

给定该输入文件:

Ignore 1
Ignore 2
Ignore 3
Ignore 4
Document Id= 123456 :Container ID=123123 :record status = complete : Document Name = T.DOC : Sender name = george:
Document Id= 789101 :Container ID=123123 :record status = complete : Document Name = form25 : Sender name = george:
Document Id= 121314 :Container ID=123123 :record status = complete : Document Name = ian.doc : Sender name = george:
上述计划将产生:

sh$ python r.py
Document Id= 123456 
Document Id= 789101 
Document Id= 121314 

该循环的目的是什么:
用于itertools.islice(csvfile,4,None)中的行:
?在我看来,在
文件阅读器中循环应该足够了。。。还是我错了?Hi Sylvain u输入文件在我需要丢弃的每个文件的顶部有4行。这就是我使用itertools.islicetheus的原因——我忘了提到输入文件在每个需要丢弃的文件顶部有4行。这就是itertools.islice循环的原因。我不太明白的是,为什么索引不起作用呢?我对有问题的行进行了评论,“对于itertool.islice(csvfiile,4,None)中的行:”我似乎仍然有一个索引超出范围的错误。我想知道数据是否有什么不寻常的地方阻止它创建索引?谢谢Sylvain,你的解释非常有用。Sylvain-如果有多个输入文件,这有什么原因不起作用吗?在修改代码以匹配您显示的内容之后,我仍然会遇到索引错误。如果我把文件写出来就可以了,但由于某种原因,我无法使用诸如打印之类的索引(第[0]行)