⑴ python之csv模塊
csv文件具有格式簡單,快速存取,兼容性好等特點,工程、金融、商業等很多數據文件都是採用csv文件保存和處理。工作中數據處理也用到了csv,簡要總結下使用經驗,特別是那些由於本地兼容性導致的與官方文檔的差異使用。
csv(comma Seperated Values)文件的格式非常簡單,類似一個文本文檔,每一行保存一條數據,同一行中的各個數據通常採用逗號(或tab)分隔。
python自帶了csv模塊,專門用於處理csv文件的讀取和存檔。
csv模塊中,主要由兩種方式存取csv文件:函數方法;類方法。
csv.reader(csvfile,dialect ='excel',** fmtparams)
返回一個reader對象,它將迭代給定csvfile中的行。
csvfile可以是任何支持迭代器協議的對象,並在每次next()調用其方法時返回一個字元串- 文件對象和列表對象都是合適的。如果csvfile是一個文件對象,那麼它必須在平台上以「b」標志打開,這會產生影響。可以給出可選的 dialect 參數,該參數用於定義特定於CSV方言的一組參數。它可以是類的子類的實例,也可以是函數Dialect返回的字元串之一 list_dialects()。其他可選的fmtparams可以給出關鍵字參數來覆蓋當前方言中的各個格式參數。
csv.writer(csvfile,dialect ='excel',** fmtparams)
返回一個編寫器對象,負責將用戶的數據轉換為給定的類文件對象上的分隔字元串。
csvfile可以是帶有write()方法的任何對象 。如果csvfile是一個文件對象,那麼它必須在平台上以「b」標志打開,這會產生影響。 可以給出可選的dialect參數,該參數用於定義特定於CSV方言的一組參數。它可以是類的子類的實例,也可以是函數Dialect返回的字元串之一 list_dialects()。可以給出其他可選的fmtparams關鍵字參數來覆蓋當前dialect中的各個格式參數。
class csv.DictReader(f,fieldnames = None,restkey = None,restval = None,dialect ='excel',* args,** kwds)
創建一個像常規閱讀器一樣操作的對象,但將讀取的信息映射到一個dict,其鍵由可選的 fieldnames 參數給出。 欄位名 的參數是一個序列,其元素與輸入數據的順序中的欄位相關聯。這些元素成為結果字典的關鍵。如果省略 fieldnames 參數,則文件 f 的第一行中的 值 將用作欄位名。如果讀取的行包含的欄位多於欄位名序列,則將剩餘數據添加 為由restkey 值鍵入的序列。如果讀取的行的欄位數少於欄位名序列,則其餘的鍵將採用可選的 restval 參數的值。任何其他可選或關鍵字參數都將傳遞給基礎 reader 實例。
class csv.DictWriter(f,fieldnames,restval ='',extrasaction ='raise',dialect ='excel',* args,** kwds)
創建一個像常規編寫器一樣操作的對象,但將字典映射到輸出行。的欄位名的參數是一個序列識別在哪些值在傳遞給字典中的順序按鍵的writerow()方法被寫入到文件˚F。如果字典缺少欄位名中的鍵,則可選的restval參數指定要寫入的值。如果傳遞給方法的字典包含在欄位名中找不到的鍵,則可選的extrasaction參數指示要採取的操作。如果設置為a 則被提升。如果設置為writerow()'raise'ValueError'ignore',字典中的額外值將被忽略。任何其他可選或關鍵字參數都將傳遞給基礎 writer實例。
請注意,與DictReader類不同,它的fieldnames參數DictWriter不是可選的。由於Python的dict 對象沒有排序,因此沒有足夠的信息來推斷應該將行寫入文件f的順序。
⑵ python中怎麼拆分一行內多列數據成多行
1、兩個數據變成兩行:先在該列後面插入一列——選該列——菜單欄——數據——分列——分隔符號——下一步——分號(勾選)——完成。其它該行的數據同時復制變成兩行:復制~插入復制單元格。2、對應把表2中的部分列復制到表1中:在表1的某一列第1行輸入=VLOOKUP($A1,表2!$A:$Z,COLUMN(A1),)回車並向右和向下填充。
⑶ python中對csv文件某一列的每一行文本進行分詞後再寫到該文件另一列怎麼做
#-*-coding:utf8-*-
importcsv
l=[['1','WonderfulSpam'],['2','LovelySpam']]
#模擬數據寫入一個csv
withopen('eggs.csv','w',newline='')ascsvfile:
spamwriter=csv.writer(csvfile,delimiter=',',
quotechar='"',quoting=csv.QUOTE_MINIMAL)
forrowinl:
spamwriter.writerow(row)
#從文件讀取
l=[]
withopen('eggs.csv',newline='')ascsvfile:
spamreader=csv.reader(csvfile,delimiter=',',quotechar='"')
forrowinspamreader:
l=l+[row]
#把兩列拼接增加為第三列寫回到文件
withopen('eggs.csv','w',newline='')ascsvfile:
spamwriter=csv.writer(csvfile,delimiter=',',
quotechar='"',quoting=csv.QUOTE_MINIMAL)
forrowinl:
print(row)
spamwriter.writerow(row+[row[0]+row[1]])
⑷ 求Python大神指導,一個csv文件,把其中每一列的數據提取出來單獨保存為一個csv文件
csv是Comma-Separated Values的縮寫,是用文本文件形式儲存的表格數據,比如如下的表格:
就可以存儲為csv文件,文件內容是:
No.,Name,Age,Score
1,mayi,18,99
2,jack,21,89
3,tom,25,95
4,rain,19,80
假設上述csv文件保存為"test.csv"
1.讀文件
如何用Python像操作Excel一樣提取其中的一列,即一個欄位,利用Python自帶的csv模塊,有兩種方法可以實現:
第一種方法使用reader函數,接收一個可迭代的對象(比如csv文件),能返回一個生成器,就可以從其中解析出csv的內容:比如下面的代碼可以讀取csv的全部內容,以行為單位:
#!/usr/bin/python3
# -*- conding:utf-8 -*-
__author__ = 'mayi'
import csv
#讀
with open("test.csv", "r", encoding = "utf-8") as f:
reader = csv.reader(f)
rows = [row for row in reader]
print(rows)
得到:
[['No.', 'Name', 'Age', 'Score'],
['1', 'mayi', '18', '99'],
['2', 'jack', '21', '89'],
['3', 'tom', '25', '95'],
['4', 'rain', '19', '80']]
要提取其中某一列,可以用下面的代碼:
#!/usr/bin/python3
# -*- conding:utf-8 -*-
__author__ = 'mayi'
import csv
#讀取第二列的內容
with open("test.csv", "r", encoding = "utf-8") as f:
reader = csv.reader(f)
column = [row[1] for row in reader]
print(column)
得到:
['Name', 'mayi', 'jack', 'tom', 'rain']
注意從csv讀出的都是str類型。這種方法要事先知道列的序號,比如Name在第2列,而不能根據'Name'這個標題查詢。這時可以採用第二種方法:
第二種方法是使用DictReader,和reader函數類似,接收一個可迭代的對象,能返回一個生成器,但是返回的每一個單元格都放在一個字典的值內,而這個字典的鍵則是這個單元格的標題(即列頭)。用下面的代碼可以看到DictReader的結構:
# -*- conding:utf-8 -*-
__author__ = 'mayi'
import csv
#讀
with open("test.csv", "r", encoding = "utf-8") as f:
reader = csv.DictReader(f)
column = [row for row in reader]
print(column)
得到:
[{'No.': '1', 'Age': '18', 'Score': '99', 'Name': 'mayi'},
{'No.': '2', 'Age': '21', 'Score': '89', 'Name': 'jack'},
{'No.': '3', 'Age': '25', 'Score': '95', 'Name': 'tom'},
{'No.': '4', 'Age': '19', 'Score': '80', 'Name': 'rain'}]
如果我們想用DictReader讀取csv的某一列,就可以用列的標題查詢:
#!/usr/bin/python3
# -*- conding:utf-8 -*-
__author__ = 'mayi'
import csv
#讀取Name列的內容
with open("test.csv", "r", encoding = "utf-8") as f:
reader = csv.DictReader(f)
column = [row['Name'] for row in reader]
print(column)
得到:
['mayi', 'jack', 'tom', 'rain']
2.寫文件
讀文件時,我們把csv文件讀入列表中,寫文件時會把列表中的元素寫入到csv文件中。
#!/usr/bin/python3
# -*- conding:utf-8 -*-
__author__ = 'mayi'
import csv
#寫:追加
row = ['5', 'hanmeimei', '23', '81']
out = open("test.csv", "a", newline = "")
csv_writer = csv.writer(out, dialect = "excel")
csv_writer.writerow(row)
得到:
⑸ 如何用python讀取csv文件,並把csv文件的第3,4列形成一個列表在python 中顯示。如圖中的兩列數據
import pandas as pd
df=pd.read(r'e:/aaaaa.csv')
df.iloc[:,2:4].values.tolist()
⑹ 說說如何利用 Python 處理 CSV 文件
CSV 表示 「Comma-Separated Values (逗號分隔的值) 」 , CSV 文件是簡化的電子表格,實際為純文本文件。
一個 CSV 文件,格式是這樣的:
因為 CSV 文件中的每個單元格都是以逗號分割,所以也許有人會對每行文本調用 split() 方法,來解析 CSV 文件。但 CSV 文件也有自己的轉義字元,通過轉義字元,允許逗號和其他字元作為值的一部分,但單純使用 split() 方法不能處理這些轉義字元。因為這些潛在的缺陷,所以建議總是使用 csv 模塊來讀寫 CSV 文件。
csv 模塊是 Python 自帶的,所以可以直接導入。
要使用 csv 模塊從 CSV 文件中讀取數據,我們需要創建一個 Reader 對象。 通過 Reader 對象,我們可以迭代遍歷 CSV 文件中的每一行內容。
運行結果:
要用 csv 模塊讀取 CSV 文件,首先先使用 open() 函數打開它 ,就像打開任何其他文本文件一樣。然後將它傳遞給 csv .reader() 函數。 這個函數將返回一個 Reader 對象。注意,csv .reader() 函數不接受文件名作為入參。
要訪問 Reader 對象中的值,最直接的方法,就是利用 list() 將它轉換成一個普通 Python 列表。它實際為一個包含列表的列表,用於表示二維數據。
我們還可以使用表達式 data [ row ][ col ] 來訪問 CSV 中特定行和列的值。其中, row 是 data 中一個列表的下標, col 是該列表中,我們想訪問的項的下標:
運行結果:
運行結果:
Writer 對象可以讓我們把數據寫入 CSV 文件。
運行結果:
在 Windows 上,需要為 open() 函數的 newline 關鍵字參數傳入一個空字元串。如果沒有設置 newline 參數, output.csv 中的行距將變為兩倍,如下圖所示。
如果寫入的內容包含逗號,那麼 csv 模塊會自動加上雙引號,對其進行轉義,如下例所示。
運行結果:
我們也可以利用 delimiter ,來製作 TSV 文件,TSV 是Tab-separated values的縮寫,即以製表符作為分隔符的文件;利用 lineterminator 參數來設定行距。
運行結果:
這里利用 lineterminator='\n\n\n' 將行與行之間的字元變為三個換行符,效果就是實現了 3 倍行距。