前言
養成一個好的習慣只需要堅持21天,Day13
IO進程
- StringIO和BytesIO
StringIO
數據的讀寫可以像上一節一樣,對文件進行讀寫,同樣我們也可以在內存中讀寫。StringIO可以在內存中讀寫str,和上一節的文件讀寫類似:
from io import StringIO
f = StringIO()
f.write('hello')
f.write(' ')
f.write('world!')
print(f.getvalue())
# hello world!
也可以直接用一個str初始化StringIO,然後,像讀文件一樣讀取:
# test2
from io import StringIO
f = StringIO('Hello!\nHi!\nGoodbye!')
while True:
s = f.readline()
if s=='':
break
print(s.strip())
# Hello!
# Hi!
# Goodbye!
BytesIO
BytesIO操作二進制數據,可以在內存中讀寫bytes,可以直接用一個bytes初始化BytesIO:
#test3
from io import BytesIO
f = BytesIO()
f.write('中文'.encode('utf-8'))
print(f.getvalue())
#運行結果: b'\xe4\xb8\xad\xe6\x96\x87'
- 操作文件和目錄
Python內置的os模塊可以直接調用操作系統提供的接口函數,例如:
import os
os.name()
#'posix'
如果是posix
,說明系統是Linux
、Unix
或Mac OS X
,如果是nt
,就是Windows
系統。
要獲取詳細的系統信息,可以調用uname()
函數:
os.uname()
# posix.uname_result(sysname='Darwin', nodename='yanyukundeMacBook-Air.local', release='18.7.0', version='Darwin Kernel Version 18.7.0: Tue Aug 20 16:57:14 PDT 2019; root:xnu-4903.271.2~2/RELEASE_X86_64', machine='x86_64')
操作文件和目錄的函數一部分放在os
模塊中,一部分放在os.path
模塊中:
# 查看當前目錄的絕對路徑:
>>> os.path.abspath('.')
'/Users/Comme_moi'
# 在某個目錄下創建一個新目錄,首先把新目錄的完整路徑表示出來:
>>> os.path.join('/Users/Comme_moi', 'testdir')
'/Users/Comme_moi/testdir'
# 然後創建一個目錄:
>>> os.mkdir('/Users/Comme_moi/testdir')
# 刪掉一個目錄:
>>> os.rmdir('/Users/Comme_moi/testdir')
把兩個路徑合成一個時,我們要通過os.path.join()
函數,在拆分路徑的時候,通過os.path.split()
函數,注意我們不要通過字符串的操作直接拼接和拆分路徑。
>>> os.path.split('/Users/Comme_moi/testdir/file.txt')
#運行結果: ('/Users/Comme_moi/testdir', 'file.txt')
os.path.splitext()
函數可以直接讓你得到文件擴展名,對於我們獲取文件信息很方便:
>>> os.path.splitext('/path/to/file.txt')
# 運行結果: ('/path/to/file', '.txt')
接着,我們可以使用os
模塊中的函數對文件進行重命名和刪除操作,但是模塊中不存在複製函數,原因是複製文件並非由操作系統提供的系統調用。
# 對文件重命名:
>>> os.rename('test.txt', 'test.py')
# 刪掉文件:
>>> os.remove('test.py')
練習
編寫一個程序,能在當前目錄以及當前目錄的所有子目錄下查找文件名包含指定字符串的文件,並打印出相對路徑。
import os
def search(path,name):
# listdir可以列出給定的目錄文件名
file_list = os.listdir(path)
# 遍歷目錄
for x in file_list:
# 判斷要查找的文件名是否在目錄中
if name in x:
# 輸出查詢文件的路徑
print(os.path.join(path,x))
path = input('請輸入文件夾目錄:')
name = input('請輸入要查詢的文件:')
search(path,name)
# 原文鏈接https://blog.csdn.net/qq_39138295/article/details/85096815