簡單翻譯:Python - 如何根據CSV來刪除重複的格/列

2024-09-27 00:21:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个逗号分隔的CSV文件的城市,州,邮编和州缩写。不同的cites文件中有重复的邮政编码。我的输出只需要列出一个城市和一个邮政编码,而不是一个城市的名称和所有不同的邮政编码。在

以下是我在数据中的数据(csv文件中有26k行)

Phoenix, Arizona, 87654, AZ
Phoenix, Arizona, 87655, AZ
Tuscon, Arizona, 98754, AZ
Tuscon, Arizona, 98755, AZ
Tuscon, Arizona, 98756, AZ

我需要的是删除重复的城市行,只保留一行。所以我的输出应该是这样的。在

^{pr2}$

这是我现在的代码,它不起作用。在

import os, sys, csv

f1 = csv.reader(open('originalcities.csv', 'rb'))
writer = csv.writer(open("output_cities.csv", "wb"))
city = set()
for row in f1:
    if row[1] not in city:
        write.writerow(row)
        city.add( row[1] )

我不确定代码是否对我来说是正确的,以获得我正在寻找的输出。当我运行这个代码时,我得到了这个错误。在

for row in f1:
_csv.Error: iterator should return strings, not bytes (did you open the file in
text mode?)

非常感谢任何帮助。谢谢您。在


Tags: 文件csv数据代码incityopenaz
2条回答

使用set删除重复项怎么样?在

line_sets = []
full_set = []

with open('file.txt') as inp:
    lines = inp.readlines()

    for i in range(0, len(lines)):
        # strip for precaution
        tokens = [w.strip() for w in lines[i].split(',')[0:2]]
        tmp_set = set(tokens)

        if tmp_set not in line_sets:
            full_set.append(lines[i].split(','))
            line_sets.append(tmp_set)

with open('output.txt', 'w') as out:
    for line in full_set:
        out.write(','.join(line))

在输出.txt

^{pr2}$

使用row[1]意味着每个状态保留一个条目。在

您应该在(row[0], row[1])上进行测试(城市/州的组合,以避免混淆,例如德克萨斯州里士满和弗吉尼亚州里士满)。在

import csv

IN_FILE  = 'originalcities.csv'
OUT_FILE = 'output_cities.csv'

def main():
    with open(IN_FILE, 'rb') as inf, open(OUT_FILE, 'wb') as outf:
        incsv, outcsv  = csv.reader(inf), csv.writer(outf)

        # read data and de-duplicate by city and state
        citystates = set()
        for row in incsv:
            citystate = tuple(row[0:2])
            if citystate not in citystates:
                outcsv.writeline(row)
                citystates.add(citystate)

if __name__=="__main__":
    main()

**编辑:**

根据@Fernando的建议,这里有一个不需要集合的版本,它只是比较连续的行(这要求输入数据已经按排序的顺序排列,或者至少每个城市/州组合的所有出现都在一起)。在

^{pr2}$

相关问题 更多 >

    热门问题