首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在某些行后编写CSV

在某些行后编写CSV
EN

Stack Overflow用户
提问于 2017-09-08 13:44:39
回答 2查看 106关注 0票数 3

我有一个CSV,比如2.csv,在这里发布示例:

代码语言:javascript
复制
,ANPIS,,,,,,,
,AGENTIA JUDETEANA PENTRU PLATI SI INSPECTIE SOCIALA TIMIS,,,,,,,
,,,,,,,,
,Macheta Comparativa CREDITORI - numai pentru Beneficiile a caror Evidenta se tine si in Contabilitate si in aplicatia SAFIR,,,,,,,
,Situatie ANALITICA - NOMINAL la 30.06.2017,,,,,,,
,8. INDEMNIZATIE ART. 31 SI ART. 32 OUG 111/2010,,,,,,,
,Nr. Benef,Nume Prenume,CNP,Data Constituirii,Suma Contabilitate,Suma SAFIR,Differenta Suma,Explicatii daca exista diferente
,1,2,3,4,5,6,7=5-6,8
,1,IONELA,2820,Mai/2017,3579,3579,0,
,2,GHEORGHE,18609,Februarie/2017,185,185,0,
,3,GHEORGHE,186091,Martie/2017,185,185,0,
,4,GHEORGHE,18609,Aprilie/2017,185,185,0,

我想使用python 3重写从第9行开始的列表到它的列表,并保留前8行,就像现在一样,我读到了next()可以跳过标题,我尝试这样做:

代码语言:javascript
复制
import csv
with open("data//2.csv", "w") as f:
    writer = csv.writer(f)
    header = next(writer)
    writer.writerows(mylist)

但这将是正确的:

TypeError:'_csv.writer‘对象不是迭代器

如何在第8行(在我的例子中)开始写我的列表?谢谢您抽时间见我!

编辑:我的列表将如下所示:

代码语言:javascript
复制
mylist= [['AUGUSTIN', 14111, 'Mar 2016', 0, 600], ['AUGUSTIN', 1451, 'Feb 2015', 0, 600], ['IOAN', 1480, 'Aug 2014, Sept 2014, Oct 2014', 0, 291]]

写完后,输出将如下所示:

代码语言:javascript
复制
,ANPIS,,,,,,,
,AGENTIA JUDETEANA PENTRU PLATI SI INSPECTIE SOCIALA TIMIS,,,,,,,
,,,,,,,,
,Macheta Comparativa CREDITORI - numai pentru Beneficiile a caror Evidenta se tine si in Contabilitate si in aplicatia SAFIR,,,,,,,
,Situatie ANALITICA - NOMINAL la 30.06.2017,,,,,,,
,8. INDEMNIZATIE ART. 31 SI ART. 32 OUG 111/2010,,,,,,,
,Nr. Benef,Nume Prenume,CNP,Data Constituirii,Suma Contabilitate,Suma SAFIR,Differenta Suma,Explicatii daca exista diferente
,1,2,3,4,5,6,7=5-6,8
,AUGUSTIN, 14111, Mar 2016, 0, 600,
,AUGUSTIN, 1451, Feb 2015, 0, 600,
,IOAN, 1480, Aug 2014, Sept 2014, Oct 2014, 0, 291,
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-08 14:02:05

csv文件不是读写的.它们只是用迭代器映射的普通文本文件,但只有在使用reader时才能使用,所以next只在读取时才能工作。

因此,您必须读取前8行,存储它们,然后在输出中打开另一个文件(或再次打开那个文件),并同时存储这8行头行,然后存储新输出。

这段代码完成了我刚才描述的内容:

代码语言:javascript
复制
import csv
with open("input.csv", "r") as f:
    reader = csv.reader(f)
    start_of_list = [next(reader) for _ in range(8)]

mylist= [['AUGUSTIN', 14111, 'Mar 2016', 0, 600], ['AUGUSTIN', 1451, 'Feb 2015', 0, 600], ['IOAN', 1480, 'Aug 2014, Sept 2014, Oct 2014', 0, 291]]

with open("output.csv","w",newline="") as f:
    writer = csv.writer(f)
    writer.writerows(start_of_list)
    writer.writerows(mylist)
票数 2
EN

Stack Overflow用户

发布于 2017-09-08 15:49:11

下面是您问题的解决方案,首先读取您的文件,即2.csv,然后选择所需的行,直到保留该行数据,然后以追加模式打开另一个新的csv文件"desired.csv“,并追加所需的行和列表。

代码语言:javascript
复制
with open('2.csv', "rb") as fd:
    reader = csv.reader(fd)
    desired_rows = [row for idx, row in enumerate(reader) if idx < 9]
    with open("desired.csv", "ab") as saved:
        writer = csv.writer(saved)
        writer.writerows(desired_rows)
        writer.writerows(mylist)

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46117964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档