python - 提取从 CSV 排序的两列
问题描述
我有一个包含多个值的大型 csv 文件,格式为
Date,Dslam_Name,Card,Port,Ani,DownStream,UpStream,Status
2020-01-03 07:10:01,aart-m1-m1,204,57,302xxxxxxxxx,0,0,down
我想提取Dslam_Name
和Ani
值,对它们进行排序并将它们Dslam_name
写入两个不同列中的新 csv。
到目前为止,我的代码如下:
import csv
import operator
with open('bad_voice_ports.csv') as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
sortedlist = sorted(readCSV, key=operator.itemgetter(1))
for row in sortedlist:
bad_port = row[1][:4],row[4][2::]
print(bad_port)
f = open("bad_voice_portsnew20200103SORTED.csv","a+")
f.write(row[1][:4] + " " + row[4][2::] + '\n')
f.close()
但是我的值Dslam_Name
和Ani
值保存在同一列中。
作为下一步,我想计算相同值出现在第一列的次数。
解决方案
您正在强迫它们成为单列。将两者连接成一个字符串意味着 Python 不再将它们视为独立的。
但试试这个:
import csv
import operator
with open('bad_voice_ports.csv') as readfile, open('bad_voice_portsnew20200103SORTED.csv', 'w') as writefile:
readCSV = csv.reader(readfile)
writeCSV = csv.writer(writefile)
for row in sorted(readCSV, key=operator.itemgetter(1)):
bad_port = row[1][:4],row[4][2::]
print(bad_port)
writeCSV.writerow(bad_port)
如果您想包含每个键出现的次数,您也可以轻松地将其包含在程序中。我会稍微重构以将阅读和写作分开。
import csv
import operator
from collections import Counter
with open('bad_voice_ports.csv') as readfile:
readCSV = csv.reader(readfile)
rows = []
counts = Counter()
for row in readCSV:
rows.append([row[1][:4], row[4][2::]])
counts[row[1][:4]] += 1
with open('bad_voice_portsnew20200103SORTED.csv', 'w') as writefile:
writeCSV = csv.writer(writefile)
for row in sorted(rows):
print(row)
writeCSV.writerow([counts[row[0]]] + row)
我建议从 CSV 文件中完全删除标题行;如果您想保留第一行,则丢弃(或分离并重新添加)第一行应该是一个简单的更改。(此外,硬编码输入和输出文件名是有问题的;也许让程序从中读取它们sys.argv[1:]
。)
推荐阅读
- typescript - 有什么方法可以优化在 VSTS 中生成代码覆盖率报告的时间吗?
- github - 为什么“发布”事件也会生成“推送”事件?
- r - readxl 如何误读 excel xlsx 文件以及如何修复它?
- php - 如何在 Slim 4 中注入多个 PDO 实例
- reactjs - 在 ReactJs 中动态删除部分表单时的焦点字段
- javascript - p5.js:当我的鼠标悬停在正在处理的草图中的不同元素上时,如何使文本出现?
- javascript - onload 刚刚创建的 4 个 img 元素
- android - 如何调用意图颤动以打开电话信息菜单?
- java - 小米和OPPO等中国ROM的工作管理器,在电池优化时,将预定的工作延迟增加几个小时
- javascript - javascript中的异步编程是什么意思?