【问题标题】:Print first 6 lines in CSV and then start reading row在 CSV 中打印前 6 行,然后开始读取行
【发布时间】:2017-07-03 19:54:01
【问题描述】:

所以我有一个 CSV,我试图打印出标题的前 6 行,然后开始代码。我是超级新手。我知道如何使用 next(reader) 跳过前 6 行,但我需要打印前 5 行,因为它是标题,然后在数据开始的第 8 行启动脚本。所以我认为这是在 reader = 之后的某种打印语句,然后可能是 next(reader) 之后启动代码。只是我的理论。

import csv

with open('GAT_US_PartReview_2017-06-23.csv', newline='') as f:
    reader = csv.reader(f)



    for row in reader:
        hqline, part_no, part_class, appl_req, appl_count, intr_req, 
        intr_count, oe_intr, has_oe_intr, has_attr_editor,
        part_IMG_req, has_part_img, has_part_img, has_mpcc, warr_req, 
        warr_txt, warr_pdf, msds_req, has_msds, upc_req, has_upc, 
        has_unspsc, attr_count, attrval_count, valid_part = row

Supplier Line:,,Gates Rubber - Denver (GAT),,,,,,,,,,,,,,,,,,,,,,
Summary:,,Parts HQ Abbr,,,,,,,,,,,,,,,,,,,,,,
ACCT No:,,40013586,,,,,,,,,,,,,,,,,,,,,,
RecCount:,,10221,,,,,,,,,,,,,,,,,,,,,,
Applicable Date:,,"June 14, 2017 (Wednesday)",,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,
HQ Line,Part No,Part Class,Appl Req,Appl Count ,Intr Req,Intr Count ,OE Intr Req,Has OE Intr,Has Attr Editor, Has Attr Values,Part IMG Req,Has Part IMG,Has MPCC,Warr Req,Has Warr TXT,Has Warr PDF,MSDS Req,Has MSDS,UPC Req,Has UPC,Has UNSPSC,Attr Count ,AttrVal Count ,Valid Part
GAT,'27210',S,NO,0,YES,1,YES,NO,YES,YES,YES,YES,YES,YES,YES,YES,NO,NO,YES,YES,YES,30,13,YES
GAT,'27211',O,NO,0,YES,1,YES,NO,YES,YES,YES,YES,YES,YES,YES,YES,NO,NO,YES,YES,YES,30,14,YES
GAT,'27212',S,NO,0,YES,1,YES,NO,YES,YES,YES,YES,YES,YES,YES,YES,NO,NO,YES,YES,YES,30,13,YES
GAT,'27213',S,NO,0,YES,1,YES,NO,YES,YES,YES,YES,YES,YES,YES,YES,NO,NO,YES,YES,YES,30,13,YES
GAT,'27220',S,NO,0,YES,2,YES,NO,YES,YES,YES,YES,YES,YES,YES,YES,NO,NO,YES,YES,YES,35,20,YES
GAT,'27221',S,NO,0,YES,2,YES,NO,YES,YES,YES,YES,YES,YES,YES,YES,NO,NO,YES,YES,YES,35,20,YES

【问题讨论】:

  • 而不是图像.. 你能发布一些示例输出内容。所以我可以复制它并检查?
  • 已发布...有点难看。让我知道是否有更好的方法。

标签: python python-3.x csv


【解决方案1】:

你为什么不尝试枚举?

import csv

with open('GAT_US_PartReview_2017-06-23.csv', newline='') as f:
    reader = csv.reader(f)

    for row_num, row in enumerate(reader):
        if row_num <= 5:
            print row  # Print out the header
        else:
            hqline, part_no, part_class, appl_req, appl_count, intr_req, 
            intr_count, oe_intr, has_oe_intr, has_attr_editor,
            part_IMG_req, has_part_img, has_part_img, has_mpcc, warr_req, 
            warr_txt, warr_pdf, msds_req, has_msds, upc_req, has_upc, 
            has_unspsc, attr_count, attrval_count, valid_part = row

【讨论】:

  • 这行得通!只需要一些调整即可摆脱 CSV 中所有丑陋的撇号和逗号。
  • 现在的问题是让脚本开始在第 8 行运行,哈哈
  • 我想你能猜出来一个;)
  • 试图将其转换为使用 xldx 读取 .xlsx 文件。我得到它导入和读取文件,但似乎无法为枚举找到正确的组合来读取工作簿。
  • 您有几个选项可以读取 .xlsx 文件。您可以尝试xlrdopenpyxl 或任何其他 Python Excel 库。我会推荐 openpyxl,因为它维护得更积极。使用 openpyxl 您应该能够选择一定范围的列和行,因此任务应该会容易得多。
【解决方案2】:

简单地跳过前六行,然后使用简单的if..else

csv 文件示例:

Supplier,  GAT   
Summary, Parts   
ACCT no, 40404
RecCount, 10122
App Date, june 14,2017

HQ,Part No, Part class, Stuff, Other stuff
GAT,'27211',O,NO,0
GAT,'27212',O,YES,0
GAT,'99999',O,NOPE,0

代码:

import csv

stuff = []

with open('test_file.csv', newline='') as f:
    freader = csv.reader(f)
    count=0
    for line in freader:
        count+=1
        if count>6:
            hqline, part_no, part_class, appl_req, appl_count=line
            print(hqline, part_no, part_class, appl_req, appl_count)
        else:
            stuff.append(line)


print("-----------------------------------")
print(stuff)

输出:

HQ Part No  Part class  Stuff  Other stuff
GAT '27211' O NO 0
GAT '27212' O YES 0
GAT '99999' O NOPE 0
-----------------------------------
[['Supplier', '  GAT   '], ['Summary', ' Parts   '], ['ACCT no', ' 40404'], ['RecCount', ' 10122'], ['App Date', ' june 14', '2017'], []]
>>>  

所以基本上如果计数小于或等于六,我只是将那些不需要的字符串附加到stuff 列表中。

stuff.append(line)

如果 line 大于 6,我将按照您的要求对其进行解包。

hqline, part_no, part_class, appl_req, appl_count=line

希望这对你来说很清楚。

当然您可以打印它们。我只是附加向您解释这个概念。

【讨论】:

    猜你喜欢
    • 2017-03-26
    • 2013-12-08
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多