【python】csv文件的讀寫操作&&將字符串裏的數字找出

最近在學習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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章