【python】csv文件的读写操作&&将字符串里的数字找出

1 篇文章 0 订阅
1 篇文章 0 订阅

最近在学习pytorch,有一个猫狗分类的kaggle比赛,预测结果要保存在csv文件中提交。其中格式要求第一列是id(纯数字),第二列是预测为狗的概率。 但我预测出来的id那一列里忘记tensor.item()操作了,以至于输出的不是纯数字,懒得在代码里改了,也抓住这个机会来学一学字符串的处理与csv的读取操作。

这个是预测出来的图,很明显不符合赛方要求的格式


在这里插入图片描述

需要将id这一列变成纯数字,如下才是正确的


在这里插入图片描述

一、CSV文件的读取操作

使用python的csv库读取

import csv 
file_name = 'test.csv'
with open(file_name, 'r') as f: # 'r'是只读方式读取
    rows = csv.reader(f)
    for row in rows:
        print(row)

以下是输出

['id', 'label']
['tensor(291)', '0.854692101']
['tensor(212)', '0.007425705']
['tensor(4528)', '0.652951479']
['tensor(1513)', '0.58295995']
['tensor(906)', '0.991941571']
['tensor(52)', '0.939000905']
['tensor(11518)', '0.999034882']
['tensor(10489)', '0.998047113']
['tensor(1626)', '0.974285424']
[Finished in 0.1s]

这里提一下open()的读写参数参数:详见:传送门
在这里插入图片描述
值得注意的是:

      w模式打开文件,如果文件中有数据,再次写入内容,会把原来数据的覆盖掉

     a模式打开文件,如果文件中有数据,再次写入内容时,不会覆盖原来的数据,而是在其后添加数据

二、提取出字符串中的数字

使用正则表达式提取,需要re库

import csv 
import re 

pattern = re.compile(r'\d+')   # 查找数字

file_name = 'test.csv'
with open(file_name, 'r') as f: # 'r'是只读方式读取
    rows = csv.reader(f)
    for row in rows:
    	num = pattern.findall(row[0]) # 读出第一列中字符串中的数字
    	print(num)
		

以下是输出

[]
['291']
['212']
['4528']
['1513']
['906']
['52']
['11518']
['10489']
['1626']
[Finished in 0.1s]

三、csv文件的写入

代码:

with open('test_write.csv', 'w') as f: # 如果指定的文件不存在,则会自动创建
	writer = csv.writer(f)			
	writer.writerow(['序号', '姓名'])
	

四、将提取出的数字写入到csv文件中

import csv 
import re  

pattern = re.compile(r'\d+')   # 查找数字

# 读取第一列,提取出数字
fname = 'result.csv'
num = []
with open(fname, 'r') as f :
	rows = csv.reader(f)
	for row in rows:
		
		if row[0] == "id" :
			continue
		#print(*pattern.findall(row[0]))	
		num.append([*pattern.findall(row[0]), row[1]])


# 写入到result_new.csv文件里
with open('result_new.csv', 'w', newline='') as f:
	writer = csv.writer(f)			
	writer.writerow(['id', 'label'])
	writer.writerows(num)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值