本文目錄一覽:
- 1、python讀寫文件
- 2、Python如何從文件讀取數據
- 3、python讀取文件—txt文件常用讀寫操作
- 4、python 讀寫文件中 w與wt ; r與rt 有何區別?
- 5、python request/讀寫/上傳文件
- 6、python如何讀取文件的內容
python讀寫文件
讀文件
1)使用open()方法打開文件,返回一個文件對象
原型:open(file, mode=’r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True)
舉例:f = open(‘test.txt’, ‘r’)
test.txt表示文件路徑(包含文件名,這個file參數可以是絕對或者相對路徑)
r表示是讀文本文件,rb是讀二進制文本文件。(這個mode參數默認值就是r)
2)使用close()方法關閉文件
f.close()
打開後的文件必須關閉,因為文件對象會佔用系統資源,系統打開文件數量也就有限了
3)打開文件時的異常處理
f=open(‘test.txt’, ‘r’)
f.read()
f.close()
FileNotFoundError: [Errno 2] No such file or directory: ‘test.txt’
文件讀寫時都有可能產生異常IOError(比如文件不存在),這樣其後面的f.read(),f.close()就不會調用。為保證無論是否異常都可以關閉文件,一般使用try … finally來處理:
try:
f = open(‘test.txt’, ‘r’)
f.read()
finally:
if f:
f.close()
但這種寫法過於繁瑣,所以Python引入了with語句來自動調用close()方法:
with open(‘test.txt’, ‘r’) as f:
f.read()
4)讀文件 – read()、readline() 和 readlines()
read() 一次讀取整個文件,它通常用於將文件內容放到一個字符串變量中。如果文件過大,內存不夠,可以通過反覆調用read(size)方法,每次最多讀取size個位元組的內容。
readline() 一次讀取文件中一行內容,可反覆調用
readlines() 一次讀取所有內容並按行返回列表,該列表可以由for … in … 結構再進一步處理。
特別注意:
這三種方法是把每行末尾的’\n’也讀進來了,如有需要就得我們手動去掉’\n’
with open(‘test.txt’, ‘r’) as f:
list = f.readlines()
for i in range(0, len(list)):
list[i] = list[i].rstrip(‘\n’)
寫文件
1)寫文件和讀文件是一樣的,唯一區別是open文件時,傳入標識符不同,即’w’或者’wb’表示寫文本文件或寫二進制文件
f = open(‘test.txt’, ‘w’)
f = open(‘test.txt’, ‘wb’)
f = open(‘test.txt’, ‘a’)
f.close()
特別注意:
1. 如果沒有這個文件,會自動創建一個新文件;如果有,就會先把原文件的內容清空再寫入;若不想清空原來的內容而是直接在後面追加新的內容,就用’a’這個模式
2. 寫文件,操作系統往往不會立刻把數據寫入磁盤,而是放到內存緩存起來,空閑的時候再慢慢寫入。只有調用close()方法時,操作系統才保證把沒有寫入的數據全部寫入磁盤。忘記調用close()的後果是數據可能只寫了一部分到磁盤,剩下的丟失了。
2)寫文件 – write()、writelines()
write()方法和read()、readline()方法對應,是將字符串寫入到文件中。
writelines()方法和readlines()方法對應,也是針對 列表 的操作。它接收一個 字符串列表 作為參數,將他們寫入到文件中。
特別注意:
換行符不會自動的加入,需要顯式的加入換行符。
f = open(‘test.txt’, ‘w’)
f.writelines([“111\n”, “222\n”, “333\n”])
補充說明:
1)對於非默認編碼(utf-8)的文件,需要open時添加encording參數,選擇對應的編碼方式
2)r+, w+, a+,可讀可寫
3)seek()方法,移動文件指針
seek(offset[, whence]) ,offset是相對於某個位置的偏移量。位置由whence決定,默認whence=0,從開頭起;whence=1,從當前位置算起;whence=2相對於文件末尾移動,通常offset取負值。
Python如何從文件讀取數據
1.1 讀取整個文件
要讀取文件,需要一個包含幾行文本的文件(文件PI_DESC.txt與file_reader.py在同一目錄下)
PI_DESC.txt
3.1415926535
8979323846
2643383279
5028841971
file_reader.py
with open(“PI_DESC.txt”) as file_object:
contents = file_object.read()
print(contents)
我們可以看出,讀取文件時,並沒有使用colse()方法,那麼未妥善的關閉文件,會不會導致文件收到損壞呢?在這裡是不會的,因為我們在open()方法前邊引入了關鍵字with,該關鍵字的作用是:在不需要訪問文件後將其關閉
1.2文件路徑
程序在讀取文本文件的時候,如果不給定路徑,那麼它會先在當前目錄下進行檢索,有時候我們需要讀取其他文件夾中的路徑,例如:
現在文件PI_DESC.txt存儲在python目錄的子文件夾txt中
那麼我們讀取文本內容的代碼得修改為:
with open(“txt\PI_DESC.txt”) as file_object:
contents = file_object.read()
print(contents)
給open參數傳遞的參數得給相對路徑
在Windows中,使用反斜杠(\),但是由於python中,反斜杠被視為轉義字符,在Windows最好在路徑開頭的單(雙)引號前加上r
相對路徑:即相對於程序文件的路徑
絕對路徑:即文本在硬盤上存儲的路徑
使用絕對路徑的程序怎麼寫呢 ?
with open(r”D:\python\txt\PI_DESC.txt”) as file_object:
contents = file_object.read()
print(contents)
1.3逐行讀取
讀取文件時,可能需要讀取文件中的每一行,要以每一行的方式來檢查文件或者修改文件,那麼可以對文件對象使用for循環
file_path = ‘txt\PI_DESC.txt’with open(file_path) as file_object:
for line in file_object:
print(line)
程序運行結果如下:
通過運行結果我們可以看出,打印結果中間有很多空白行,這些空白行是怎麼來的呢?因為在這個文件中,每行的末尾都有一個看不見的換行符,而print語句也會加一個換行符,因此每行末尾就有2個換行符:一個來自文件,另外一個來自print,消除這些換行符,只需要使用方法rstrip()
file_path = ‘txt\PI_DESC.txt’with open(file_path) as file_object:
for line in file_object:
print(line.rstrip())
打印結果
通過運行結果我們可以看出,打印結果中間有很多空白行,這些空白行是怎麼來的呢?因為在這個文件中,每行的末尾都有一個看不見的換行符,而print語句也會加一個換行符,因此每行末尾就有2個換行符:一個來自文件,另外一個來自print,消除這些換行符,只需要使用方法rstrip()
file_path = ‘txt\PI_DESC.txt’with open(file_path) as file_object:
for line in file_object:
print(line.rstrip())
打印結果
1.4創建一個包含文件各行內容的列表
使用關鍵字with時,open()返回的文件對象只能在with代碼塊可用,如果要在with代碼塊外訪問文件的內容,可在with塊中將文件各行存儲在一個列表,並在with代碼塊外使用該列表
file_path = ‘txt\PI_DESC.txt’with open(file_path) as file_object:
lines = file_object.readlines()for line in lines:
print(line.rstrip())
1.5使用文件的內容
在上面一節中我們提到把數據提取到內存中,那麼我們就可以對數據進行隨心所欲的操作了
需要:將圓周率連在一起打印出來(刪除空格),並打印其長度
file_path = ‘txt\PI_DESC.txt’with open(file_path) as file_object:
lines = file_object.readlines()pi_str = ”for line in lines:
pi_str += line.strip()print(pi_str.rstrip())print(len(pi_str.rstrip()))
file_path = ‘txt\PI_DESC.txt’with open(file_path) as file_object:
lines = file_object.readlines()pi_str = ”for line in lines:
pi_str += line.strip()print(pi_str.rstrip())print(len(pi_str.rstrip()))
注意最後print語句並沒有縮進,如果是縮進的話就會每取一行打印一次
打印效果如下
python讀取文件—txt文件常用讀寫操作
f = open(“data.txt”,”r”) #設置文件對象
f.close() #關閉文件
為了方便,避免忘記close掉這個文件對象,可以用下面這種方式替代
with open(‘data.txt’,”r”) as f: #設置文件對象
str = f.read() #可以是隨便對文件的操作
f = open(“data.txt”,”r”) #設置文件對象
str = f.read() #將txt文件的所有內容讀入到字符串str中
f.close() #將文件關閉
f = open(“data.txt”,”r”) #設置文件對象
line = f.readline()
line = line[:-1]
while line: #直到讀取完文件
line = f.readline() #讀取一行文件,包括換行符
line = line[:-1] #去掉換行符,也可以不去
f.close() #關閉文件
data = []
for line in open(“data.txt”,”r”): #設置文件對象並讀取每一行文件
data.append(line) #將每一行文件加入到list中
f = open(“data.txt”,”r”) #設置文件對象
data = f.readlines() #直接將文件中按行讀到list里,效果與方法2一樣
f.close() #關閉文件
可以使用pandas的.read_csv,讀取文件的時候可以給每一列起名字,通過列名來調取相應列的數據。
import pandas as pd
data = pd.read_csv(” OSDO1012.txt”,sep=’,’,header=None, names=[‘lat’,’lon’,’time’,’z’]
使用data.lat就可以讀取名為lat這一列的數據
data = np.loadtxt(“data.txt”,skiprows = 1) #將文件中數據加載到data數組裡,並且跳過第一行
with open(‘data.txt’,’w’) as f: #設置文件對象
f.write(str) #將字符串寫入文件中
data = [‘a’,’b’,’c’]
單層列表寫入文件
with open(“data.txt”,”w”) as f:
f.writelines(data)
每一項用空格隔開,一個列表是一行寫入文件
data =[ [‘a’,’b’,’c’],[‘a’,’b’,’c’],[‘a’,’b’,’c’]]
with open(“data.txt”,”w”) as f: #設置文件對象
for i in data: #對於雙層列表中的數據
i = str(i).strip(‘[‘).strip(‘]’).replace(‘,’,”).replace(‘\”,”)+’\n’ #將其中每一個列表規範化成字符串
f.write(i) #寫入文件
直接將每一項都寫入文件
data =[ [‘a’,’b’,’c’],[‘a’,’b’,’c’],[‘a’,’b’,’c’]]
with open(“data.txt”,”w”) as f: #設置文件對象
for i in data: #對於雙層列表中的數據
f.writelines(i) #寫入文件
np.savetxt(“data.txt”,data) #將數組中數據寫入到data.txt文件
np.save(“data.txt”,data) #將數組中數據寫入到data.txt文件
python 讀寫文件中 w與wt ; r與rt 有何區別?
w,r,wt,rt都是python裏面文件操作的模式。
w是寫模式,r是讀模式。
t是windows平台特有的所謂text mode(文本模式),區別在於會自動識別windows平台的換行符。
類Unix平台的換行符是\n,而windows平台用的是\r\n兩個ASCII字符來表示換行,python內部採用的是\n來表示換行符。
rt模式下,python在讀取文本時會自動把\r\n轉換成\n.
wt模式下,Python寫文件時會用\r\n來表示換行。
python request/讀寫/上傳文件
python 讀寫文件:
data_json = json.dumps(result_r) #json字符串
f =open(‘E://XXX.txt’,”a+”) #打開文件,追加+讀寫
f.write(data_json) # data_json 寫入XXX.txt’文件
f.seek(0) # 光標移動到文件開頭
lines = f.read() # 逐行讀入
f.close() #關閉文件
mode 打開的方式(r,w,a,x,b,t,r+,w+,a+,U)
r 以只讀方式打開文件。文件的指針會放在文件的開頭。
w 以寫入方式打開文件。文件存在覆蓋文件,文件不存在創建一個新文件。
a 以追加方式打開文件。如果文件已存在,文件指針放在文件末尾。如果文件不存在,創建新文件並可寫入。
r+ 打開一個文件用於讀寫,文件指針會放在文件的開頭
w+ 打開一個文件用於讀寫,文件存在覆蓋文件,文件不存在創建一個新文件。
a+ 打開一個文件用於讀寫,如果文件已存在,文件指針放在文件末尾。如果文件不存在,創建新文件並可寫入。
記憶方法:記住r讀,w寫,a追加,每個模式後加入+號就變成可讀寫。
f =open(‘E://xxx.txt’,”a+”) / f=open(r’E://xxx.txt’,mode=’a+’,encoding=’UTF-8′)
踩坑1
沒有加encoding=’UTF-8’,可能會報如下錯:
import requests # 使用 request函數需導入 request 庫
import json #使用 JSON 函數需要導入 json 庫: import json 。
param ={} #請求body
url =’http://域名/api’
header = {‘content-type’:’application/json’}
r = requests.post(url,json=param,headers=header) #發送post請求
result_r = r.json() #請求返回的json傳入對象result_r
data_json = json.dumps(result_r) #將 Python-result_r對象轉為字符串 json.dumps()
文件上傳請求(csv文件)
file_path = “xxx.csv” 文件路徑
uploaddata = {“file”:open(file_path, “rb”)}
file_upload_result = requests.post(api_URL, files=uploaddata, cookies=cookie)
python如何讀取文件的內容
# _*_ coding: utf-8 _*_
import pandas as pd
# 獲取文件的內容
def get_contends(path):
with open(path) as file_object:
contends = file_object.read()
return contends
# 將一行內容變成數組
def get_contends_arr(contends):
contends_arr_new = []
contends_arr = str(contends).split(‘]’)
for i in range(len(contends_arr)):
if (contends_arr[i].__contains__(‘[‘)):
index = contends_arr[i].rfind(‘[‘)
temp_str = contends_arr[i][index + 1:]
if temp_str.__contains__(‘”‘):
contends_arr_new.append(temp_str.replace(‘”‘, ”))
# print(index)
# print(contends_arr[i])
return contends_arr_new
if __name__ == ‘__main__’:
path = ‘event.txt’
contends = get_contends(path)
contends_arr = get_contends_arr(contends)
contents = []
for content in contends_arr:
contents.append(content.split(‘,’))
df = pd.DataFrame(contents, columns=[‘shelf_code’, ‘robotid’, ‘event’, ‘time’])
擴展資料:
python控制語句
1、if語句,當條件成立時運行語句塊。經常與else, elif(相當於else if) 配合使用。
2、for語句,遍歷列表、字符串、字典、集合等迭代器,依次處理迭代器中的每個元素。
3、while語句,當條件為真時,循環運行語句塊。
4、try語句,與except,finally配合使用處理在程序運行中出現的異常情況。
5、class語句,用於定義類型。
6、def語句,用於定義函數和類型的方法。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/243188.html