如何利用python在一个文档里写入长须_Python语法入门—文件处理
1、什么是文件
文件是操作系統提供給用戶/應用程序操作硬盤的一種虛擬的概念/接口
==計算機三大層次結構==
用戶/應用程序(open())
操作系統(文件)
計算機硬件(硬盤)
2、為何要用文件
==保存數據==
用戶/應用程序 可以通過文件將數據永久保存的硬盤中?,即操作文件就是操作硬盤
==讀取數據==
用戶/應用程序 直接操作的是文件,對文件進行的所有的操作,都是在向操作系統發送系統調用,然后再由操作將其轉換成具體的硬盤操作
3、如何使用文件
3.1 基本操作流程
3.1.1 基本流程
=1=打開文件——文件句柄?:open('文件路徑', '模式')
=Windows路徑分隔符問題
open('C:\a.txt\nb\c\d.txt')#解決方案一:推薦(windows系統的路徑是用?\ 間隔)
open(r'C:\a.txt\nb\c\d.txt')#解決方案二:(Linux系統的路徑是用?/ 間隔)
open('C:/a.txt/nb/c/d.txt')
f=open(r'aaa/a.txt',mode='rt') #f的值是一種變量,占用的是應用程序的內存空間.
r 的作用是避免路徑中出現的‘\n’被解釋器識別為轉義字符#print(f)#x=int(10)
f=open('a.txt','r')的過程分析
#1、由應用程序向操作系統發起系統調用open(...)
#2、操作系統打開該文件,并返回一個文件句柄給應用程序
#3、應用程序將文件句柄賦值給變量f
=絕對路徑和相對路徑
https://www.cnblogs.com/bigorangecc/p/11179863.html
=2=操作文件:讀/寫文件—— res=f.read()? ?res=f.write()
讀/寫文件,應用程序對文件的讀寫請求都是在向操作系統發送系統調用,然后由操作系統控制硬盤把輸入讀入內存、或者寫入硬盤
res=f.read()print(type(res))#print(res)
=3=關閉文件?—— f.close()
f.close() #回收操作系統資源print(f)f.read() # 變量f存在,但是不能再讀了del f # 回收應用程序資源
3.1.2 ?with上下文管理
=1= 作用一:為了防止遺漏 f.close()
#文件對象又稱為文件句柄
#with open('a.txt',mode='rt') as f1: # f1=open('a.txt',mode='rt')#res=f1.read()#print(res)
=2= 作用二:一次讀取多個文件
with open('a.txt',mode='rt') as f1,\ ?# 一次輸入有換行的代碼—— \的作用是反義字符,本身換行了,再在文末加上反義字符 \,則表示上下兩行是同一部分的內容
open('b.txt',mode='rt') as f2:
res1=f1.read()
res2=f2.read()print(res1)print(res2)#f1.close()
#f2.close()
3.1.3 指定字符編碼
強調:t 和 b不能單獨使用,必須跟r/w/a連用
t文本(默認的模式)
1、讀寫都以str(unicode)為單位的
2、文本文件
3、必須指定encoding='utf-8'
#沒有指定encoding參數操作系統會使用自己默認的編碼#linux系統默認utf-8#windows系統默認gbk
with open('c.txt',mode='rt',encoding='utf-8') as f:
res=f.read() #t模式會將f.read()讀出的結果解碼成unicode
print(res,type(res))#內存:utf-8格式的二進制-----解碼-----》unicode#硬盤(c.txt內容:utf-8格式的二進制)
3.2 模式介紹
=1= 模式一:控制文件讀寫內容的模式—— t 和 b
強調:t?和 b 不能單獨使用,必須跟r / w /?a 連用
t 模式
1、讀寫都是以字符串(unicode)為單位
2、只能針對文本文件
3、必須指定字符編碼,即必須指定encoding參數
b 模式(binary模式)
1、讀寫都是以字節bytes為單位
2、可以針對所有文件
3、一定不能指定字符編碼,即一定不能指定encoding參數
總結:
1、在操作純文本文件方面,t 模式幫我們省去了編碼與解碼的環節,b 模式則需要手動編碼與解碼,所以此時?t 模式更為方便
2、針對非文本文件(如圖片、視頻、音頻等)只能使用b模式
=2= 模式二:控制文本讀寫操作的模式—— r?/w /?a /?+
r—只讀模式
w—只寫模式
a—只追加寫模式
+—r+、w+、a+
x—只寫模式
3.3 文件的操作模式
3.3.1 控制文件讀寫內容的模式
1、t 模式
t模式只能讀文本文件
#錯誤演示:t模式只能讀文本文件
with open(r'愛情公寓.mp4',mode='rt') as f:
f.read()#硬盤的二進制讀入內存-》t模式會將讀入內存的內容進行decode解碼操作
with open(r'd.txt',mode='rt',encoding='utf-8') as f:
res=f.read() #utf-8的二進制->unicode
print(res)
2、b 模式
2.1 讀取圖片
with open(r'test.jpg',mode='rb',encoding='utf-8') as f:
res=f.read() #硬盤的二進制讀入內存—>b模式下,不做任何轉換,直接讀入內存
print(res) #bytes類型—》當成二進制
print(type(res))
2.2 讀取文本文件
with open(r'd.txt',mode='rb') as f:
res=f.read() #utf-8的二進制
print(res,type(res))print(res.decode('utf-8'))
2.3 b模式下寫入文件
with open(r'f.txt',mode='wb') as f:
f.write('你好hello'.encode('utf-8'))
f.write('哈哈哈'.encode('gbk'))
2.4 案例——改寫文件copy工具
#文件拷貝工具
src_file=input('源文件路徑>>:').strip()
dst_file=input('源文件路徑>>:').strip()
with open(r'{}'.format(src_file),mode='rb') as f1,\
open(r'{}'.format(dst_file),mode='wb') as f2:#res=f1.read() # 內存占用過大
#f2.write(res)
for line in f1: #推薦使用
f2.write(line)
3、案例分析——r、b對比—循環讀取文件
方式一:自己控制每次讀取的數據的數據量
with open(r'test.jpg',mode='rb') as f:whileTrue:
res=f.read(1024) #1024
if len(res) ==0:break
print(len(res))
方式二:以行為單位讀,當一行內容過長時會導致一次性讀入內容的數據量過大
with open(r'g.txt',mode='rt',encoding='utf-8') as f:for line inf:print(len(line),line)
with open(r'g.txt',mode='rb') as f:for line inf:print(line)
with open(r'test.jpg',mode='rb') as f:for line inf:print(line)
3.3.2 控制文件讀寫操作的模式——以 t 模式為基礎進行內存操作
1、r(默認的操作模式):只讀模式,當文件不存在時報錯,當文件存在時文件指針跳到開始位置
with open('c.txt',mode='rt',encoding='utf-8') as f:print('第一次讀'.center(50,'*'))
res=f.read() #把所有內容從硬盤讀入內存
print(res)
with open('c.txt', mode='rt', encoding='utf-8') as f:print('第二次讀'.center(50,'*'))
res1=f.read()print(res1)
案例一 :用戶登入驗證
用戶登入驗證:
inp_username=input('your name>>:').strip()
inp_password=input('your password>>:').strip()#驗證
with open('user.txt',mode='rt',encoding='utf-8') as f:for line inf:#print(line,end='') # egon:123\n
username,password=line.strip().split(':')if inp_username == username and inp_password ==password:print('login successfull')break
else:print('賬號或密碼錯誤')
2、w:只寫模式,當文件不存在時會創建空文件,當文件存在會清空文件,指針位于開始位置
with open('d.txt',mode='wt',encoding='utf-8') as f:
f.read()#報錯,不可讀
f.write('擦勒\n')
強調1:
在以w模式打開文件沒有關閉的情況下,連續寫入,新的內容總是跟在舊的之后with open('d.txt',mode='wt',encoding='utf-8') as f:
f.write('你好1\n')
f.write('你好2\n')
f.write('你好3\n')
強調2:
如果重新以w模式打開文件,則會清空文件內容with open('d.txt',mode='wt',encoding='utf-8') as f:
f.write('你好1\n')
with open('d.txt',mode='wt',encoding='utf-8') as f:
f.write('你好2\n')
with open('d.txt',mode='wt',encoding='utf-8') as f:
f.write('你好3\n')
案例二 :w模式用來創建全新的文件——文本文件的copy工具
文本文件的copy工具
src_file=input('源文件路徑>>:').strip()
dst_file=input('源文件路徑>>:').strip()
with open(r'{}'.format(src_file),mode='rt',encoding='utf-8') as f1,\
open(r'{}'.format(dst_file),mode='wt',encoding='utf-8') as f2:
res=f1.read()
f2.write(res)
3、a:只追加寫,在文件不存在時會創建空文檔,在文件存在時文件指針會直接調到末尾
with open('e.txt',mode='at',encoding='utf-8') as f:#f.read() # 報錯,不能讀
f.write('擦嘞1\n')
f.write('擦嘞2\n')
f.write('擦嘞3\n')
強調 w 模式與 a 模式的異同:1相同點:在打開的文件不關閉的情況下,連續的寫入,新寫的內容總會跟在前寫的內容之后2 不同點:以 a 模式重新打開文件,不會清空原文件內容,會將文件指針直接移動到文件末尾,新寫的內容永遠寫在最后
案例三:a模式用來在原有的文件內存的基礎之上寫入新的內容,比如記錄日志、注冊
注冊功能
name=input('your name>>:')
pwd=input('your code>>:')
with open('db.txt',mode='at',encoding='utf-8') as f:
f.write('{}:{}\n'.format(name,pwd))
總結
以上是生活随笔為你收集整理的如何利用python在一个文档里写入长须_Python语法入门—文件处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac地址厂商对应表_网络工程师一分钟搞
- 下一篇: python判断点在直线的哪一侧_判断点