Python檔案操作(未完成)
一、檔案的基本操作
2.1 檔案操作步驟
-
開啟檔案
-
讀寫等操作
-
關閉檔案
注意:可以只打開和關閉檔案,不進行任何讀寫操作
2.1.1 開啟
在python,使⽤用open函式,可以開啟⼀一個已經存在的檔案,或者建立一個新⽂檔案,語法如下:
open(name, mode)
name:是要開啟的目標檔名的字元串(可以包含檔案所在的具體路徑)。
mode:設定開啟檔案的模式(訪問模式):只讀、寫入、追加等。
2.1.1.1 開啟檔案模式
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()
注意:
- w 和 a 模式:如果檔案不存在則建立該⽂件;如果檔案存在, w 模式先清空再寫入, a 模式直接末尾追加。
- 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()
2.1.2.3 seek()
作⽤:用來移動檔案指標。
語法如下:
檔案物件.seek(偏移量, 起始位置)
起始位置:
0:檔案開頭
1:當前位置
2:檔案結尾
2.1.3 關閉
檔案物件.close()
file物件常用函式
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')
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()