Python文件操作(讀寫CSV)


一、文件的基本操作

2.1 文件操作步驟

  1. 打開文件

  2. 讀寫等操作

  3. 關閉文件

注意:可以只打開和關閉文件,不進行任何讀寫操作

2.1.1 打開

在python,使⽤用open函數,可以打開⼀一個已經存在的文件,或者創建一個新⽂文件,語法如下:

open(name, mode)

name:是要打開的目標文件名的字符串(可以包含文件所在的具體路徑)。
mode:設置打開文件的模式(訪問模式):只讀、寫入、追加等。

2.1.1.1 打開文件模式

image-20200915161357023

2.1.1.2 快速體驗

f = open('test.txt', 'w')

注意:此時的 f 是 open 函數的⽂文件對象

2.1.2 文件對象方法

2.1.2.1 寫

  • 語法
對象對象.write('內容') 
  • 體驗
# 1. 打開⽂文件
f = open('test.txt', 'w')
# 2.⽂文件寫⼊入
f.write('hello world')
# 3. 關閉⽂文件
f.close()

注意:

  1. w 和 a 模式:如果文件不存在則創建該⽂件;如果文件存在, w 模式先清空再寫入, a 模式直接末尾追加。
  2. r 模式:如果文件不存在則報錯

2.1.2.2 讀

  • read()
⽂文件對象.read(num)

num表示要從文件中讀取的數據的長度(單位是字節),如果沒有傳入num,那么就表示讀取文件中所有的數據。

  • readlines()

readlines可以按照行的方式把整個文件中的內容進行一次性讀取,並且返回的是一個列表,其中每一行的數據為一個元素。

f = open('test.txt')
content = f.readlines()
# ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc']
print(content)
# 關閉⽂文件
f.close()
  • readline()

readline()⼀次讀取⼀行內容。

f = open('test.txt')
content = f.readline()
print(f'第⼀行:{content}')
content = f.readline()
print(f'第⼆行:{content}')
# 關閉⽂文件
f.close()

image-20200915162820665

2.1.2.3 seek()

作⽤:用來移動文件指針。
語法如下:

文件對象.seek(偏移量, 起始位置)

起始位置:
0:文件開頭
1:當前位置
2:文件結尾

2.1.3 關閉

文件對象.close() 

file對象常用函數

image-20200915183014795

open 與 with open

file = open('test.txt','w')
file.write('123')
file.close()

等同於

with open('test.txt','w') as file:
file.write('123')

二、文件讀寫CSV

什么是CSV?
CSV是一種通用的、相對簡單的文件格式,被用戶、商業和科學廣泛應用。最廣泛的應用是在程序之間轉移表格數據,而這些程序本身是在不兼容的格式上進行操作的(往往是私有的和/或無規范的格式)。因為大量程序都支持某種CSV變體,至少是作為一種可選擇的輸入/輸出格式。
“CSV”並不是一種單一的、定義明確的格式。因此在實踐中,術語“CSV”泛指具有以下特征的任何文件:
1、純文本,使用某個字符集,比如ASCII、Unicode、EBCDIC或GB2312;由記錄組成
2、每條記錄被分隔符分隔為字段(典型分隔符有逗號、分號或制表符
3、有時分隔符可以包括可選的空格)
4、每條記錄都有同樣的字段序列

1.創建一個CSV文件

with open('test.csv','w')as file:
    file.write('id,url,name')
    file.write('\n')
    file.write('1,http://www.baidu.com,baidu')
    file.write('\n')
    file.write('2,http://taobao.com,taobao')
    file.write('\n')
    file.write('3,http://jd.com,jd')

image-20200915183721188

2.讀取CSV文件

#導入模塊
import csv
#打開文件,用with打開可以不用去特意關閉file了
with open('test.csv','r')as csvfile:
    #讀取csv文件,返回的是迭代類型
    read=csv.reader(csvfile)
    for i in read:
        print(i)

3.讀取CSV指定行內容

import csv
with open("test.csv","r") as csvfile:
    read = csv.reader(csvfile)
    for index,value in enumerate(read):
    # 比如讀取第二行,行數從0開始記,所以第二行 用 index 進行判斷
    # 或者讀取 m~n 行 if (m<=index<=n)
        if(index==1):
            print(value)

4.寫入CSV文件

import csv
# 1.打開文件 as 稱它為 變量xxx, 若不存在該文件,則創建
with open('newcsv.csv','w',encoding='utf-8') as newfile:
    #存儲csv,讀取的文件writer
    writer=csv.writer(newfile)
    #寫入一行
    writer.writerow(['序號','網址','名稱'])
    #寫入多行
    lists=[
        [1,'www.baidu.com','百度'],
        [2,'www.qq.com','騰訊'],
        [3,'www.jingdong.com','京東']
    ]
    writer.writerow(lists)

5.解決寫入空行的問題(方法一)

import csv
# 在 open( ) 的參數內加上 newline=''
with open('newcsv.csv','w',encoding='utf-8',newline='')
as newfile:
    # 存儲csv,讀取的文件writer
    writer=csv.writer(newfile)
    # 寫入一行
    writer.writerow(['序號','網址','名稱'])
    # 寫入多行
    list=[
        [1,'www.baidu.com','百度'],
        [2,'www.qq.com','騰訊'],
        [3,'www.jingdong.com','京東']
    ]
    writer.writerows(lists)

6.解決寫入的空行問題(方法二)

import csv
import codecs
with codecs.open('newcsv.csv','w','utf-8') as newfile:
# 存儲 csv、讀取的文件writer
    writer = csv.writer(newfile)
#寫入一行
    writer.writerow(['序號','網址','名稱'])
# 寫入多行
    lists = [
        [1,'www.baidu.com','百度'],
        [2,'www.qq.com','騰訊'],
        [3,'www.jingodng.com','京東']
    ]
    writer.writerows(lists)

7.追加內容到CSV文件

import csv
# 注意 open( )第二個參數為 'a' 的話,是追加append 的意思
with open('newcsv.csv','a',encoding='utf-8',newline='')as csvfile:
    mywriter=csv.writer(csvfile)
    mywriter.writerow(['江蘇省|淮安市|清江浦區'])
    mywriter.writerow(['山東省|青島市|黃島區'])
    mywriter.writerow(['湖南省|懷化市|鶴城區'])

8.自定義讀取CSV文件

csv文件有時候並不是分隔符只是逗號,還有可能是其他符號,那么我們該如何讀取其他分隔符的csv文件呢?
現在我們想把前四行正常讀取,5-7行的按照省、市、區的列表讀取,該如何讀取呢
為csv注冊一個新的讀取規則:
語法:

csv.register_dialect ( '規則名稱' , delimiter = '分隔符',quoting = csv.QUOTE_ALL)

注銷規則語法: csv.unregister_dialect()


免責聲明!

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



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