使用 Python 处理 csv 文件时如何跳过标题?
- 2025-01-09 08:47:00
- admin 原创
- 11
问题描述:
我正在使用下面提到的代码通过 Python 编辑 csv。代码中调用的函数构成了代码的上半部分。
问题:我希望下面引用的代码从第二行开始编辑 csv,我希望它排除包含标题的第一行。现在它只在第一行应用函数,而我的标题行正在发生变化。
in_file = open("tmob_notcleaned.csv", "rb")
reader = csv.reader(in_file)
out_file = open("tmob_cleaned.csv", "wb")
writer = csv.writer(out_file)
row = 1
for row in reader:
row[13] = handle_color(row[10])[1].replace(" - ","").strip()
row[10] = handle_color(row[10])[0].replace("-","").replace("(","").replace(")","").strip()
row[14] = handle_gb(row[10])[1].replace("-","").replace(" ","").replace("GB","").strip()
row[10] = handle_gb(row[10])[0].strip()
row[9] = handle_oem(row[10])[1].replace("Blackberry","RIM").replace("TMobile","T-Mobile").strip()
row[15] = handle_addon(row[10])[1].strip()
row[10] = handle_addon(row[10])[0].replace(" by","").replace("FREE","").strip()
writer.writerow(row)
in_file.close()
out_file.close()
我尝试通过初始化row
变量来解决这个问题,1
但没有成功。
请帮我解决这个问题。
解决方案 1:
您的reader
变量是可迭代的,通过循环它您可以检索行。
为了使其跳过循环前的一项,只需调用next(reader, None)
并忽略返回值。
您还可以稍微简化代码;使用打开的文件作为上下文管理器来自动关闭它们:
with open("tmob_notcleaned.csv", "rb") as infile, open("tmob_cleaned.csv", "wb") as outfile:
reader = csv.reader(infile)
next(reader, None) # skip the headers
writer = csv.writer(outfile)
for row in reader:
# process each row
writer.writerow(row)
# no need to close, the files are closed automatically when you get to this point.
如果您想将未处理的标题写入输出文件,这也很容易,将输出传递next()
给writer.writerow()
:
headers = next(reader, None) # returns the headers or `None` if the input is empty
if headers:
writer.writerow(headers)
解决方案 2:
解决这个问题的另一种方法是使用 DictReader 类,它“跳过”标题行并使用它来允许命名索引。
给定“foo.csv”如下:
FirstColumn,SecondColumn
asdf,1234
qwer,5678
像这样使用 DictReader:
import csv
with open('foo.csv') as f:
reader = csv.DictReader(f, delimiter=',')
for row in reader:
print(row['FirstColumn']) # Access by column header instead of column number
print(row['SecondColumn'])
解决方案 3:
这样做row=1
不会改变任何事情,因为您只会用循环的结果覆盖它。
您想要next(reader)
跳过一行。
解决方案 4:
只需使用 next() 迭代一次
with open(filename) as file:
csvreaded = csv.reader(file)
header = next(csvreaded)
for row in csvreaded:
empty_list.append(row) #your csv list without header
或者在阅读器对象末尾使用 [1:]
with open(filename) as file:
csvreaded = csv.reader(file)
header = next(csvreaded)
for row in csvreaded[1:]:
empty_list.append(row) #your csv list without header
解决方案 5:
受到 Martijn Pieters 的回应的启发。
万一您只需要从csv
文件中删除标题,那么使用标准 Python 文件 I/O 库进行写入可以提高工作效率,避免使用 CSV Python 库进行写入:
with open("tmob_notcleaned.csv", "rb") as infile, open("tmob_cleaned.csv", "wb") as outfile:
next(infile) # skip the headers
outfile.write(infile.read())
解决方案 6:
with open(filename, 'r') as file:
reader = csv.DictReader(file, fieldnames=None)
# for some reason fieldnames=None causes first row to be skipped
for row in reader:
print(row) # so the the first row printed is second row in file
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD