python之文件
1、什么是文件指針?
文件指針 文件指針標記從哪個位置開始讀取數據 第一次打開文件時,通常文件指針會指向文件的開始位置 當執行了read方法后,文件指針會移動到讀取內容的末尾
創建一個當前目錄下的文件pass
內容為:
westos
linux
dd
file = open('passwd')
text = file.read()
print text
print type(text)
print len(text)
print '*******'
# 移動文件指針到文件開頭
file.seek(0)
text = file.read()
print len(text)
file.close()
2、
# 正確讀取大文件
file = open('pass')
# 為什么要設定為無限循環:
# 因為我們不知道循環的條件
# 我們不知道文件到底有多少行
while True:text = file.readline()# 判斷是否讀取到了內容# 如果文件指針到文件的最后一行,那么就讀取不到內容了if not text:break# 每讀取一行的末尾已經有一個‘\n’print text
file.close()
3、
打開一個已經有的文件,讀取完整的內容,并寫到另一個文件中去
# 源文件以只讀的方式打開
file_read = open('pass')
# 目標文件以只寫的方式打開
file_write = open('pass_copy','w')# 從源文件中讀取內容
text = file_read.read()
# 將讀取到的內容寫到目標文件
file_write.write(text)# 關閉文件
file_read.close()
file_write.close()
可以看到有一個文件pass_copy,打開后的內容和文件pass的內容一樣,實現了文件內容的復制。
# 文件操作3部曲:打開 操作 關閉
# 打開
f = open('passwdss','a')
# 操作
#content = f.read()
f.write('linux')
#print content# 關閉文件
f.close()
?
經過上面的實驗,可以總結:
r:
??? -只能讀,不能寫
??? -讀取的文件不存在,會報錯
r+:
??? -課讀可寫
??? -文件不存在,報錯
w:
??? -只能寫,不能讀
??? -會清空問覆蓋文件內容
??? -如果文件不存在,會新建文件
w+:
??? -可讀可寫
??? -文件存在,會覆蓋原文件
??? -文件不存在,創建新文件
a:
??? -只能寫,不能讀
??? -文件不存在,新建文件不報錯
??? -文件存在,不會清空文件內容
a+:
??? -可讀可寫
??? -文件不存在的時候,新建文件
??? -文件存在,不會覆蓋原文件內容
?
4、讀取二進制文件的時候
rb wb ab???? rb+ wb+ ab+
# 讀取二進制文件的內容
f1 = open('cat.jpg',mode='rb')
content = f1.read()
f1.close()f2 = open('cat1.png',mode='wb')
f2.write(content)
f2.close()
總結:可以發現有一張與cat.jpg相同的圖片出現,wb為在二進制文件不存在時新建文件。
綜合練習題
要求:
1. 生成一個大文件ips.txt,要求1200行, 每行隨機為172.25.254.0/24段的ip;
2. 讀取ips.txt文件統計這個文件中ip出現頻率排前10的ip;
import random
def create_ips_file(filename):ips = ['172.25.254.' + str(i) for i in range(1, 255)]with open(filename, 'a+') as f:for count in range(1200):f.write(random.sample(ips, 1)[0] + '\n')def sorted_by_ip(filename,count =10):ips_dict = dict()with open(filename) as f:for ip in f:if ip in ips_dict:ips_dict[ip] += 1else:ips_dict[ip] = 1sorted_ip = sorted(ips_dict.items(),key=lambda x:x[1],reverse=True)[:count]return sorted_ip
print sorted_by_ip('ips.txt')
5、os模塊:
#導入os模塊
import os
?1.返回操作系統類型,值為posix,是linux操作系統;值為nt,是windows系統。
print os.name
2.返回操作系統的詳細
print os.uname()
?3.系統的環境變量
print os.environ
?print os.environ.get('PATH')
4.判斷是否是絕對路徑(不會判斷文件或目錄是否存在)
print os.path.isabs('/tmp/westos')
print os.path.isabs('/hello')
5.生成絕對路徑
print os.path.abspath('hello.png')
print os.path.join('/home/kiosk', 'hello.png')
print os.path.join(os.path.abspath('.'), 'hello.png')
?6. 獲取目錄名或者文件名
filename = '/home/kiosk/PycharmProjects/python/20180826python/Day08/hello.png'
print os.path.basename(filename)
print os.path.dirname(filename)
7. 創建目錄/刪除目錄
os.mkdir('img')
os.makedirs('img/file') # mkdir -p
os.rmdir('img')
8. 創建文件/刪除文件
os.mknod('westos.txt')
os.remove('westos.txt')
?9.文件的重命名(mv)
os.rename('westos.txt','data1.txt')
10.判斷文件或者目錄是否存在
print os.path.exists('img')
print os.path.exists('data1.txt')
11.分離后綴名和文件名
print os.path.splitext('hello.png')
12.將目錄名和文件名分離
print os.path.split('/tmp/hello/hello.png')
?
例如:
1. 在當前目錄新建目錄img, 里面包含多個文件, 文件名各不相同(X4G5.png)
2.將當前img目錄所有以.png結尾的后綴名改為.jpg
import os
import random
import stringdef gen_code(len=4):# 隨機生成4位文件名,由字母和數字組成li = random.sample(string.ascii_letters + string.digits, len)# 將列表元素拼接成字符串return ''.join(li)def create_file():# 隨機生成多個文件名li = {gen_code() for i in range(100)}os.mkdir('img')for name in li:os.mknod('img/' + name + '.png')# create_file()def modify_suffix(dirname, old_suffix, new_suffix):""":param dirname: 所要操作的目錄:param old_suffix: 之前的文件后綴:param new_suffix: 新的文件后綴:return:"""# 1.判斷查找的目錄是否存在,如果不存在,顯示報錯if os.path.exists(dirname):# 2.找出所有以old_suffix(.png)結尾的文件pngfiles = [filename for filename in os.listdir(dirname)if filename.endswith(old_suffix)]# 3.將文件名和后綴名分開,留下文件名basefiles = [os.path.splitext(filename)[0] for filename in pngfiles]print basefiles# 4.文件名重命名for filename in basefiles:# 需要加上目錄名oldname = os.path.join(dirname, filename + old_suffix)newname = os.path.join(dirname, filename + new_suffix)os.rename(oldname, newname)print '%s 重命名成%s成功' % (oldname, newname)else:print '%s 不存在不能操作....' % dirnamemodify_suffix('img', '.jpg', '.png')
實驗結果:
????????? 當前img目錄所有以.png結尾的后綴名改為.jpg
總結
- 上一篇: Python之类
- 下一篇: iscsi网络磁盘共享