Python基礎部分4——文件處理相關

一、文本處理的格式

    1.1、文件對象=open(文件的路徑,mode=文件的打開模式,encoding=字符編碼)

f=open(r'C:\Users\stsud\Desktop\Pycharm文檔\員工信息.txt',mode='r',encoding='utf-8')  #'r'表示"原生字符串",具有轉譯的作用
data=f.read()
print(data)
f.close()    #open打開文件後需要使用close關閉被打開的文件(否則在操作系統中打開了太多的文件,佔用系統資源)

# >>:1,Alex
# >>:2,Jack
# >>:3,Rain
# >>:4,Mack

註釋:1、r'C:\Users\stsud\Desktop\Pycharm文檔\員工信息.txt'    #"r"表示"原生字符串",具有轉譯的作用

          2、mode='r'                 #以只讀模式打開這個文件

          3、encoding='utf-8'    #指定打開文件所使用的字符集

          4、f.close()                   #回收操作系統打開的文件

強調:以上操作涉及兩方面的資源

        1、操作系統需要打開文件"C:\Users\stsud\Desktop\Pycharm文檔\員工信息.txt"

        2、f就是一個python的變量

 

    1.2、使用with open打開多個文件 -- with open打開一個文件後,不需要再去使用f.close()關閉被打開的文件了,python會做這一個的處理

# 打開多個文件
with open(r'test.txt',mode='r',encoding='utf-8')as f,\
        open(r'test2.txt',mode='r',encoding='utf-8')as f2:
    res=f.read()
    res2=f2.read()
    print(res)
    print(res2)

註釋:with open打開一個文件後,不需要再去使用f.close()關閉被打開的文件了,python會做這一個的處理

 

二、文件的打開模式

    2.1、r:默認的打開模式,只讀模式文件如果不存在則報錯

    f.read()            # 只讀模式中,會讀取文件內所有的內容
    f.readline()      # 每次都會打開一行
    f.readlines()    # 把所有的文件內容轉換成列表的形式

with open('a.txt',mode='r',encoding='utf-8') as f:
    print(f.read())     #只讀模式中,會讀取文件內所有的內容
# >>:aaa
# >>:bbb
# >>:ccc

    print(f.readline())   #每次都會打開一行
# >>:aaa

    print(f.readlines())    #把文件的內容轉換成列表的形式
# >>:['aaa\n', 'aaa\n', 'aaa']

    2.2、w:只寫模式(不可讀),文件存在則清空(覆蓋)文件如果不存在則創建

with open('test.txt',mode='w',encoding='utf-8')as f:
    f.write('你好\n')         # 每次往文件內寫內容時,都是從文件開頭開始寫(文件原有內容將被覆蓋)
    # 你好

    list=['aaa\n','bbb\n','ccc\n','ddd\n','eee\n']
    dic={"aaa":111,"bbb":222} 

    f.writelines(list)     # 把一個列表裏面的內容全部寫到文件內
    # aaa
    # bbb
    # ccc
    # ddd
    # eee

    f.writelines(dic)      # 把一個字典裏面的key全部寫到文件內
    # aaabbb

    2.3、a:只追加寫模式,文件存在指針直接移動到文件末尾文件如果不存在則創建

with open('a.txt', mode='a', encoding='utf-8') as f:
    f.write('aaa\n')    #在文件末尾追加內容
# >>:你好啊
# >>:你好啊
# >>:aaa

 

三、控制文件讀寫單位的模式

    3.1、t:默認的模式(只能處理文本文件類型 "rt","wt","at")

with open('1.png',mode='rt',encoding='utf-8') as f:
    f.read()   # 在t模式下,打開png類型的文件時會報錯

 

    3.2、b:二進制模式(可以處理任意文件類型"rb","wb","ab") 該模式下讀寫但都是bytes,該模式下不能指定encoding參數 

        3.2.1、非txt類型的文件,使用b模式打開後的效果

with open('1.png',mode='rb') as f:
    data=f.read()
    print(data)
    print(type(data))
# >>:b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x03\xb5\x00\x00\x02c\x08\x02\x00
# >>:<class 'bytes'># >>:

        3.2.1、txt類型的文件,使用rb模式打開後的效果(txt類型的文件使用b模式後可以使用data.decode('utf-8')的方式讀取文件內容)

with open('a.txt',mode='rb') as f:
    data=f.read()
    print(data)
    print(type(data))
# >>:b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x95\x8aalex SB\r\n\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x95\x8awxx SB\r\naaa'
# >>:<class 'bytes'>

    print(data.decode('utf-8'))   #文本類型的文件使用b類型後,可以通過data.decode('utf-8')的方式把二進制內容識別出來
# >>:你好啊
# >>:你好啊# >>:
# >>:aaa

    3.2.3、txt類型的文件,使用wb模式打開後的效果(二進制模式打開一個文件,需要使用.encode('utf-8')指定寫的內容以哪種字符編碼存儲到文件)

with open('a.txt',mode='wb') as f:
    f.write('你好的啦啦\n'.encode('utf-8'))
    f.write('我好的啦啦\n'.encode('utf-8'))
# >>:你好的啦啦
# >>:我好的啦啦

    3.3、rt+:可讀也可寫(rt+模式相當於r+w,即可讀也可寫)

 

四、COPY 文件(讀取源文件裏面的內容寫到新文件內)

  4.1、使用讀取源文件的內容,然後把源文件的內容寫入到新文件裏面的方式實現copy文件的效果~

實現效果 python3 copy.py 複製文件 粘貼文件

import os,sys

src_file=sys.argv[1]  # src_file就是$1 源文件(源文件必須存在)
dst_file=sys.argv[2]  # dst_file就是$2 目標文件

if not os.path.isfile(src_file):
    print('文件不存在')
    sys.exit()        # 整個程序都退掉

with open(r'%s' %src_file,mode='rt',encoding='utf-8')as read_file,\
        open(r'%s' %dst_file,mode='wt',encoding='utf-8')as write_file:

        for line in read_file:       # 循環讀取源文件內容
            write_file.write(line)   # 然後寫入到目標文件內

在命令行執行命令:python3 3.py c.txt test.txt

  4.2、課外學習:執行Python命令時,拿到被執行腳本的名稱,$1 $2

import os,sys

print(sys.argv)
# ['3.py', '111', '222']
print(sys.argv[0])
# 3.py
print(sys.argv[1])
# 111
print(sys.argv[2])
# 222

執行Python命令:python3 3.py 111 222
那麼就可以拿到一個值(以列表的形式):['3.py', '111', '222']

  4.3、Python腳本里面常用的腳本使用方法提示:

#!/usr/bin/env python
# -*- coding: utf8 -*-

import sys

parameter=sys.argv

if len(parameter) != 5:
    print('Usage: %s server_name pack_name config_name [IP|all|division]' %(parameter[0]))
else:
    print('test release server')

 

  4.2.1、os模塊下的刪除與重命名功能

import os

os.remove('c.txt')         # 刪除c.txt文件
os.rename('v.txt','c.txt') # 重命名v.txt爲c.txt

 

五:修改文件內容的兩種方式

    方式一、把文件內容讀出,然後修改,然後再重新打開這個文件(文件內容會被清空),把修改後的內容寫進去

修改文件的方式一:

with open('a.txt','r',encoding='utf-8')as f:   #把文件以讀的方式取出
    data=f.read()           #把讀到的內容複製給一個變量
    data=data.replace('武大郎','武二郎')   #把文件內的內容中的'武大郎'替換成'武二郎',使用data.replace修改,然後把修改後的文件內容賦值給一個變量

with open('a.txt','w',encoding='utf-8')as f:   #把文件以寫的方式打開(由於文件已存在,所以文件內容會被清空)
    f.write(data)                     #然後以寫的方式把修改後的內容data寫到新文件中

# >>:武二郎  老女孩  211223344533   男
# >>:武二郎1 老女孩  211113452233   女

 

   方式二、一行行讀文件內容,把讀取到的內容與要修改的內容做匹配,把修改後的文件內容寫到一個新文件內,然後刪除老的文件,把新文件重命名爲老文件

#修改文件的方式二:
import os
with open('a.txt','r',encoding='utf-8')as f,\
        open('b.txt','w',encoding='utf-8') as f_new:   #把文件以讀的方式取出
    for line in f:                                     #一行行讀取源文件內容
        if '武二郎' in line:                         #判斷要修改的內容'武二郎'是否存在於文件中
            line=line.replace('武二郎','武大郎')     #如果'武二郎'存在於文件中,那麼就是要line.replace把'武二郎'修改成'武大郎'
        f_new.write(line)                          #然後把修改後的內容寫到新的文件中去

os.remove('a.txt')                 #由於上面的寫操作是把a.txt文件的內容寫到新的b.txt文件中,源文件(a.txt)是沒有任何修改的,那麼就要使用os.remove('a.txt')刪除a.txt文件
os.rename('b.txt','a.txt')         #刪除源文件a.txt後,使用os.rename把b.txt重命名爲a.txt,相當於修改了a.txt

# >>:武大郎  老女孩  211223344533   男
# >>:武大郎1 老女孩  211113452233   女

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章