python讀寫csv文件的方法(還沒試,先記錄一下)


csv模塊定義了以下功能:

csv.readercsvfiledialect ='excel'** fmtparams 

返回一個reader對象,它將迭代給定csvfile中的行。 csvfile可以是任何支持迭代器協議的對象,並在每次__next__()調用其方法時返回一個字符串- 文件對象和列表對象都是合適的。如果csvfile是一個文件對象,則應該打開它newline=''[1]可以給出 可選的 方言參數,該參數用於定義特定於CSV方言的一組參數。它可以是類的子類的實例,也可以是函數Dialect返回的字符串之一 list_dialects()。其他可選的fmtparams可以給出關鍵字參數來覆蓋當前方言中的各個格式參數。有關方言和格式參數的完整詳細信息,請參閱“ 方言和格式參數”一節。

從csv文件讀取的每一行都作為字符串列表返回。除非QUOTE_NONNUMERIC指定了format選項(在這種情況下,未加引號的字段將轉換為浮點數),否則不會執行自動數據類型轉換。

一個簡短的用法示例:

>>>

>>> import csv
>>> with open('eggs.csv', newline='') as csvfile:
...     spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
...     for row in spamreader:
...         print(', '.join(row))
Spam, Spam, Spam, Spam, Spam, Baked Beans
Spam, Lovely Spam, Wonderful Spam

csv.writercsvfiledialect ='excel'** fmtparams 

返回一個編寫器對象,負責將用戶的數據轉換為給定的類文件對象上的分隔字符串。csvfile可以是帶有write()方法的任何對象 。如果csvfile是文件對象,則應使用newline='' [1]打開它 。 可以給出可選的方言參數,該參數用於定義特定於CSV方言的一組參數。它可以是類的子類的實例,也可以是 函數Dialect返回的字符串之一list_dialects()。可以給出其他可選的fmtparams關鍵字參數來覆蓋當前方言中的各個格式參數。有關方言和格式參數的完整詳細信息,請參閱部分方言和格式參數。為了使與實現DB API的模塊接口盡可能簡單,將值None寫為空字符串。雖然這不是可逆轉換,但它可以更容易地將SQL NULL數據值轉儲到CSV文件,而無需預處理從cursor.fetch*調用返回的數據。所有其他非字符串數據str()在寫入之前都會進行字符串化。

一個簡短的用法示例:

import csv
with open('eggs.csv', 'w', newline='') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ',
                            quotechar='|', quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

csv.register_dialectname [,dialect [,** fmtparams ] ] )

方言名稱聯系起來。 name必須是一個字符串。方言可以通過傳遞子類Dialect,或通過fmtparams關鍵字參數或兩者來指定,並使用關鍵字參數覆蓋方言的參數。有關方言和格式參數的完整詳細信息,請參閱“ 方言和格式參數”一節。

csv.unregister_dialect(name)

從方言注冊表中刪除與名稱關聯的方言。Error如果name不是已注冊的方言名稱,則引發An 。

csv.get_dialect(name)

返回與姓名相關的方言。Error如果name不是已注冊的方言名稱,則引發 An 。此函數返回不可變的 Dialect

csv.list_dialects()

返回所有已注冊方言的名稱。

csv.field_size_limit([ new_limit ] )

返回解析器允許的當前最大字段大小。如果給出new_limit,則這將成為新限制。

csv模塊定義了以下類:

class csv.DictReaderffieldnames = Nonerestkey = Nonerestval = Nonedialect ='excel'* args** kwds 

創建一個像常規閱讀器一樣操作的對象,但將每行中的信息映射到OrderedDict 其鍵由可選的fieldnames參數給出。

字段名的參數是一個序列。如果省略fieldnames,則文件f的第一行中的值將用作字段名。無論字段名如何確定,有序字典都保留其原始順序。

如果一行包含的字段多於字段名,則將剩余數據放入一個列表中,並使用restkey指定的字段(默認為None)進行存儲。如果非空行的字段數少於字段名,則缺少的值將填入None

所有其他可選或關鍵字參數都傳遞給基礎 reader實例。

在版本3.6中更改:返回的行現在是類型OrderedDict

一個簡短的用法示例:

>>>

>>> import csv
>>> with open('names.csv', newline='') as csvfile:
...     reader = csv.DictReader(csvfile)
...     for row in reader:
...         print(row['first_name'], row['last_name'])
...
Eric Idle
John Cleese

>>> print(row)
OrderedDict([('first_name', 'John'), ('last_name', 'Cleese')])

class csv.DictWriterffieldnamesrestval =''extrasaction ='raise'dialect ='excel'* args** kwds 

創建一個像常規編寫器一樣操作的對象,但將字典映射到輸出行。的字段名的參數是一個sequence標識,其中在傳遞給字典值的順序按鍵的writerow()方法被寫入到文件 ˚F。如果字典缺少字段名中的鍵,則可選的restval參數指定要寫入的值。如果傳遞給方法的字典包含在字段名中找不到的鍵 ,則可選的extrasaction參數指示要采取的操作。如果設置為, 則引發默認值a 。如果設置為writerow()'raise'ValueError'ignore',字典中的額外值將被忽略。任何其他可選或關鍵字參數都將傳遞給基礎 writer實例。

請注意,與DictReader類不同,類的fieldnames參數DictWriter不是可選的。

一個簡短的用法示例:

import csv

with open('names.csv', 'w', newline='') as csvfile:
    fieldnames = ['first_name', 'last_name']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()
    writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
    writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
    writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})

csv.Dialect

Dialect類是依賴於主要用於它的屬性,這是用來定義一個特定的參數的容器類readerwriter實例。

csv.excel

excel類定義的Excel生成CSV文件的通常的性質。它以方言名稱注冊'excel'

csv.excel_tab

所述excel_tab類定義Excel生成的制表符分隔的文件的通常的性質。它以方言名稱注冊'excel-tab'

csv.unix_dialect

unix_dialect類定義在UNIX系統上,即,使用生成的CSV文件的通常性質'\n'如線路終端機和引用的所有字段。它以方言名稱注冊'unix'

版本3.2中的新功能。

csv.Sniffer

Sniffer類用來推斷一個CSV文件的格式。

Sniffer類提供了兩個方法:

sniff樣本分隔符=無

分析給定的樣本並返回Dialect反映找到的參數的子類。如果給出了可選的delimiters參數,則將其解釋為包含可能的有效分隔符的字符串。

has_header樣本

分析示例文本(假定為CSV格式), True如果第一行看起來是一系列列標題,則返回。

使用示例Sniffer

with open('example.csv', newline='') as csvfile:
    dialect = csv.Sniffer().sniff(csvfile.read(1024))
    csvfile.seek(0)
    reader = csv.reader(csvfile, dialect)
    # ... process CSV file contents here ...

csv模塊定義以下常量:

csv.QUOTE_ALL

指示writer對象引用所有字段。

csv.QUOTE_MINIMAL

指示writer對象只引用那些包含特殊字符,如字段分隔符quotechar或任何字符lineterminator

csv.QUOTE_NONNUMERIC

指示writer對象引用所有非數字字段。

指示讀者將所有非引用字段轉換為float類型。

csv.QUOTE_NONE

指示writer對象永遠不引用字段。當輸出數據中出現當前 分隔符時,它前面是當前的escapechar 字符。如果未設置escapechar,則Error在遇到需要轉義的任何字符時,編寫器將引發。

指示reader不對引號字符執行特殊處理。

csv模塊定義了以下異常:

異常csv.Error

檢測到錯誤時由任何功能引發。

 

參考: https://blog.csdn.net/qq_35892623/article/details/81267182

https://www.cnblogs.com/Keys819/p/9326575.html

1.Python處理csv文件之csv.writer()

復制代碼
import csv

def csv_write(path,data):
    with open(path,'w',encoding='utf-8',newline='') as f:
        writer = csv.writer(f,dialect='excel')
        for row in data:
            writer.writerow(row)
    return True
復制代碼

調用上面的函數

復制代碼
data = [
    ['Name','Height'],
    ['Keys','176cm'],
    ['HongPing','160cm'],
    ['WenChao','176cm']
]

csv_write('test.csv',data)
復制代碼

運行結果

 

2.Python處理csv文件之csv.reader()

復制代碼
def csv_read(path):
    data = []
    with open(path,'r',encoding='utf-8') as f:
        reader = csv.reader(f,dialect='excel')
        for row in reader:
            data.append(row)
    return data
復制代碼

調用上面的函數

data = csv_read('test.csv')
print(data)

運行結果

[['Name', 'Height'], ['Keys', '176cm'], ['HongPing', '160cm'], ['WenChao', '176cm']]

3.Python處理csv文件之csv.DictWriter()

def csv_dict_write(path,head,data):
    with open(path,'w',encoding='utf-8',newline='') as f:
        writer = csv.DictWriter(f,head)
        writer.writeheader()
        writer.writerows(data)
        return True

調用上面的函數

復制代碼
head = ['Name','Age']

data = [
    {'Name':'Keys', 'Age':28},
    {'Name':'HongPing', 'Age':29},
    {'Name':'WenChao', 'Age':15}
]

csv_dict_write('test2.csv',head,data)
復制代碼

運行結果

 

4.Python處理csv文件之csv.DictReader()

def csv_dict_read(path):
    with open(path,'r',encoding='utf-8') as f:
        reader = csv.DictReader(f,dialect='excel')
        for row in reader:
            print(row['Name'])

調用上面的函數

 

csv_dict_read('test2.csv')

 

運行結果

Keys
HongPing
WenChao


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM