Python 读取CSV文件时跳过标题
我正在做一个项目,读取冒号分隔的文件,合并到一个文件中,删除所有字段符合特定条件的记录。输入文件在我需要丢弃的每个文件的顶部有4行。将最终文件输出为以冒号分隔的文件,不包含不需要的记录 这是密码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
#!/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]行)