【问题标题】:PYTHON: Read from csv sheetPYTHON:从 csv 表中读取
【发布时间】:2020-10-19 06:45:39
【问题描述】:

我想阅读 csv 表。到目前为止,我有一个循环,它从工作表中读取所有行并为每一行创建一个特定的 txt 文件。

with openCSV(file) as newData:
    reader = csv.reader(newData)
    next(reader)
    dictData = {}
    for i, row in enumerate(reader, 1)
        dictData = {'articleID' = row[0], 'Desc':row[1], ....}

这很好。

现在我想要的是:

如果有多个相同编号的articleID,则应将其添加到一个txt文件中。

我该怎么做?

我的 CSV 文件:

【问题讨论】:

  • 你能显示你的 csv 文件的 sn-p 吗?
  • 请将 csv 添加为文本 - 而不是图片

标签: python csv parsing


【解决方案1】:

我认为pandas 非常适合这份工作

安装 pip3 install pandas

用法

import pandas as pd

df = pd.read_csv("data.csv")
df[df.duplicated(['ID'], keep=False)] #gives you all the duplicates

keep : {‘first’, ‘last’, False},默认‘first’

  • first :将重复项标记为 True,但第一次出现除外。
  • last :将重复项标记为 True,但最后一次出现除外。
  • False : 将所有重复项标记为 True。

【讨论】:

    【解决方案2】:

    下面。该代码创建了 3 个 csv 文件。每个 id 一个。

    import csv
    from collections import defaultdict
    
    data_by_id = defaultdict(list)
    with open('c:\\temp\\temp.csv')as f:
        reader = csv.reader(f)
        next(reader)
        for row in reader:
            data_by_id[row[0]].append(row[1:])
    
    for _id, data in data_by_id.items():
        with open('c:\\temp\\{}.csv'.format(_id), 'w') as f:
            f.write('id,description,price\n')
            for line in data:
                line.insert(0, _id)
                f.write(','.join(line) + '\n')
    

    temp.csv

    id,description,price
    12,desc1,12.4
    13,desc13,13.4
    12,desc132,312.4
    13,desc1er,5.8
    11,desc1wewe,77.9
    

    【讨论】:

    • 我收到错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 5428: invalid start byte
    • 你试图做什么?请尽可能详细?代码经过测试并产生了请求的输出。
    • 在我修改我的代码之前我想试试你的代码我只是改变了路径。只是为了确保您的代码正常工作。
    • 您的代码运行良好。当我导航到工作表的路径时出现错误。我有近 2000 行,当我编译 ii 时收到错误 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 5428: invalid start byte
    猜你喜欢
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 2011-02-21
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    相关资源
    最近更新 更多