python如何讀取指定csv單元格
python讀取指定csv單元格
可以使用Python的pandas庫讀取csv文件中的指定單元格。
例如,假設(shè)有一個名為"data.csv"的文件,要讀取其第2行第3列的單元格,可以這樣做:
import pandas as pd # 讀取csv文件 df = pd.read_csv("data.csv") # 讀取指定單元格 value = df.iloc[1, 2] print(value)
其中,iloc函數(shù)用于讀取指定行、列的單元格。
第一個參數(shù)是行索引,第二個參數(shù)是列索引。
對csv文件指定單元格的處理
CSV文件:Comma-Separated Values,逗號分隔值或者字符分割值,其文件以純文本的形式存儲表格數(shù)據(jù)。用文本文件和Excel都可以打開CSV文件。
下面是分別用excel和記事本打開的兩個csv文件。
規(guī)范的t.csv
非規(guī)范的test.csv
注意:
- 如果單元格內(nèi)容中存在逗號,那么這個單元格內(nèi)容會用雙引號分隔出來。如圖中test.csv中第一個單元格。
- 如果單元格內(nèi)容中存在雙引號,那在記事本打開同樣會多加引號,具體怎么加這里csv的處理規(guī)則好像有點奇怪,目前我也還沒完全搞明白。
一般的csv文件都有規(guī)范的表頭和對應(yīng)的每行數(shù)據(jù),前兩張圖片中打開的都是規(guī)范的csv文件,后兩張圖片打開的是非規(guī)范的csv文件,而Python的csv庫中也只有對csv文件整行的操作,并沒有像excel一樣可以對任意單元格操作,所以要對非規(guī)范的csv文件操作任意單元格是困難的。
本文實現(xiàn)了對非規(guī)范的csv文件的操作。
思路:csv–>二維列表–>通過列表定位單元格–>列表重寫成csv
代碼如下:
import csv class HandleCsv: # 定義存放csv內(nèi)容的list csv_list = [] def __init__(self, filename): self.filename = filename with open(self.filename)as fp: self.csv_list = list(csv.reader(fp)) print(self.csv_list) # 在第N行第M列空白單元格處修改內(nèi)容 def modify(self, n, m, value): self.csv_list[n - 1][m - 1] = value # 插入第N行 def insert_row(self, n): self.csv_list.insert(n - 1, []) # 在第N行第M列單元格插入 def insert_col(self, n, m, value): # 如果該單元格左邊的單元格為空,那么先對左邊的單元格寫入空格 if len(self.csv_list[n - 1]) < m: if len(self.csv_list[n - 1]) == m - 1: self.csv_list[n - 1].append(value) else: for i in range(len(self.csv_list[n - 1]), m - 1): self.csv_list[n - 1].append('') self.csv_list[n - 1].append(value) else: self.modify(n, m, value) # 刪除第N行 def del_row(self, n): del self.csv_list[n - 1] # 獲取第n行第m列單元格內(nèi)容 def get_value(self, n, m): return self.csv_list[n - 1][m - 1] def list2csv(self, file_path): try: fp = open(file_path, 'w') for items in self.csv_list: for i in range(len(items)): # 若元素中含有逗號,那么需要加雙引號 if items[i].find(',') != -1: fp.write('\"') fp.write(items[i]) fp.write('\"') else: fp.write(items[i]) # 最后一個元素不用加逗號 if i < len(items) - 1: fp.write(',') fp.write('\n') except Exception as e: print(e) if __name__ == '__main__': h_csv = HandleCsv(u'test.csv') # 在第4行處插入一行 h_csv.insert_row(4) # 在第4行第4列處插入單元格 h_csv.insert_col(4, 4, '第4行,第4列') h_csv.list2csv(u'test.csv')
運(yùn)行程序前的csv:
運(yùn)行程序后的csv:
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
深入解析Python中函數(shù)的參數(shù)與作用域
這篇文章主要介紹了Python中函數(shù)的參數(shù)與作用域,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-03-03Python+moviepy實現(xiàn)音頻/視頻提取器
這篇文章主要為大家詳細(xì)介紹了如何使用Python和wxPython構(gòu)建的音頻/視頻提取器應(yīng)用程序,允許用戶從視頻文件中提取音頻,或者從音頻文件中截取特定時間段,需要的可以參考下2024-10-10pandas和spark dataframe互相轉(zhuǎn)換實例詳解
這篇文章主要介紹了pandas和spark dataframe互相轉(zhuǎn)換實例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02