从 csv 文件中删除不需要的值的快速、准确、可靠的方法
fast, accurate, reliable way to remove undesirable values from a csv file
我有一个很大的 csv 文件,其中包含大量脏数据,我想通过消除所有不是绝对必要的值来稍微清理一下它。
Here 是我正在谈论的文件。
它有以下组件:
Website
,Title
,Start Date
,Employer
,Location
,lat
,lon
,Country
,Skills11
,Jobs
但我想抹去所有,但:
Employer
,Location
,Country
,Jobs
是否有特别适合此任务的特定工具?
或者也许有人有一个方便的 Python 脚本可以完成这项工作?
您可以通过 python 写入临时文件然后替换原始文件来轻松完成此操作。
import csv
from operator import itemgetter
from tempfile import NamedTemporaryFile
from shutil import move
with open("edsa_data.csv") as f, NamedTemporaryFile(dir=".", delete=False) as tmp:
# itertools.imap python2
csv.writer(tmp).writerows(map(itemgetter(3, 5, 7, 9), csv.reader(f)))
move(tmp.name, "edsa_data.csv")
更通用的方法:
import csv
from operator import itemgetter
from tempfile import NamedTemporaryFile
from shutil import move
def keep_columns(csv_f, keep_cols, **kwargs):
with open(csv_f) as f, NamedTemporaryFile("w", dir=".", delete=False) as tmp:
csv.writer(tmp, **kwargs).writerows(itemgetter(*keep_cols)(row)
for row in csv.reader(f, **kwargs))
move(tmp.name, csv_f)
keep_columns("edsa_data.csv", (3, 4, 7, 9))
对于 kwargs,您可以传递 sep="," skipinitialspace=True 等。
为了便于维护,我会使用 DictReader
/DictWriter
对。
import csv
import sys
with open(sys.argv[1], 'r') as csv_infile:
with open(sys.argv[2], 'w') as csv_outfile:
csv_in = csv.DictReader(csv_infile)
csv_out = csv.DictWriter(
csv_outfile,
['Employer','Location','Country','Jobs'],
extrasaction='ignore')
csv_out.writeheader()
csv_out.writerows(csv_in)
我有一个很大的 csv 文件,其中包含大量脏数据,我想通过消除所有不是绝对必要的值来稍微清理一下它。
Here 是我正在谈论的文件。
它有以下组件:
Website
,Title
,Start Date
,Employer
,Location
,lat
,lon
,Country
,Skills11
,Jobs
但我想抹去所有,但:
Employer
,Location
,Country
,Jobs
是否有特别适合此任务的特定工具?
或者也许有人有一个方便的 Python 脚本可以完成这项工作?
您可以通过 python 写入临时文件然后替换原始文件来轻松完成此操作。
import csv
from operator import itemgetter
from tempfile import NamedTemporaryFile
from shutil import move
with open("edsa_data.csv") as f, NamedTemporaryFile(dir=".", delete=False) as tmp:
# itertools.imap python2
csv.writer(tmp).writerows(map(itemgetter(3, 5, 7, 9), csv.reader(f)))
move(tmp.name, "edsa_data.csv")
更通用的方法:
import csv
from operator import itemgetter
from tempfile import NamedTemporaryFile
from shutil import move
def keep_columns(csv_f, keep_cols, **kwargs):
with open(csv_f) as f, NamedTemporaryFile("w", dir=".", delete=False) as tmp:
csv.writer(tmp, **kwargs).writerows(itemgetter(*keep_cols)(row)
for row in csv.reader(f, **kwargs))
move(tmp.name, csv_f)
keep_columns("edsa_data.csv", (3, 4, 7, 9))
对于 kwargs,您可以传递 sep="," skipinitialspace=True 等。
为了便于维护,我会使用 DictReader
/DictWriter
对。
import csv
import sys
with open(sys.argv[1], 'r') as csv_infile:
with open(sys.argv[2], 'w') as csv_outfile:
csv_in = csv.DictReader(csv_infile)
csv_out = csv.DictWriter(
csv_outfile,
['Employer','Location','Country','Jobs'],
extrasaction='ignore')
csv_out.writeheader()
csv_out.writerows(csv_in)