一:文件保存html
def save_to_file(file_name, contents): fh = open(file_name, 'w') fh.write(contents) fh.close() save_to_file('mobiles.txt', 'your contents str')
結果:python
將字符串修改則覆蓋原來的字符串linux
將字符串用變量替代web
將 fh = open(file_name, 'w')寫的權限去掉報錯:shell
fh.write(contents)
io.UnsupportedOperation: not writablejson
寫權限不加引號報錯:bash
fh = open(file_name, w)
NameError: name 'w' is not definedapp
def save_to_file(file_name):中少一個參數報錯:less
save_to_file('mobiles.txt',data)
TypeError: save_to_file() takes 1 positional argument but 2 were givendom
def save_to_file(file_name,contents):
fh = open(file_name, 'w')
fh.write(contents)
fh.close()
print(type(fh),fh)
data='machangwei'
save_to_file('mobiles.txt',data)
打印結果:
<class '_io.TextIOWrapper'> <_io.TextIOWrapper name='mobiles.txt' mode='w' encoding='cp936'>
當data=123或列表、元組、字典等時報錯,必須是字符串:
TypeError: write() argument must be str, not int
當其餘類型想要輸出到文件時須要變成字符串:
二:遍歷文件
目錄結構:
import os import os.path rootdir = "C:\python\day2" # 指明被遍歷的文件夾 dic={} for parent, dirnames, filenames in os.walk(rootdir): # 三個參數:分別返回1.父目錄 2.全部文件夾名字(不含路徑) 3.全部文件名字 print() for dirname in dirnames: # 輸出文件夾信息 print ("當前目錄加下級目錄parent and dirname is:" + parent+" + "+dirname) print("遍歷當前目錄文件-------------------------------------------------------------") for filename in filenames: # 輸出文件信息 print("當前目錄加文件parent and filename is:" + parent+" + "+filename) print("上面那個文件全路徑the full name of the file is:" + os.path.join(parent, filename)) # 輸出文件路徑信息
結果:
當前目錄加下級目錄parent and dirname is:C:\python\day2 + machangwei
遍歷當前目錄文件-------------------------------------------------------------
當前目錄加文件parent and filename is:C:\python\day2 + file_name.txt.txt
上面那個文件全路徑the full name of the file is:C:\python\day2\file_name.txt.txt
當前目錄加文件parent and filename is:C:\python\day2 + mobiles.txt
上面那個文件全路徑the full name of the file is:C:\python\day2\mobiles.txt
當前目錄加文件parent and filename is:C:\python\day2 + test.py
上面那個文件全路徑the full name of the file is:C:\python\day2\test.py
當前目錄加文件parent and filename is:C:\python\day2 + 今日大綱
上面那個文件全路徑the full name of the file is:C:\python\day2\今日大綱
當前目錄加下級目錄parent and dirname is:C:\python\day2\machangwei + xiaoma
遍歷當前目錄文件-------------------------------------------------------------
當前目錄加文件parent and filename is:C:\python\day2\machangwei + ma.txt
上面那個文件全路徑the full name of the file is:C:\python\day2\machangwei\ma.txt
當前目錄加文件parent and filename is:C:\python\day2\machangwei + mojiangfengyunbian.txt
上面那個文件全路徑the full name of the file is:C:\python\day2\machangwei\mojiangfengyunbian.txt
遍歷當前目錄文件-------------------------------------------------------------
部分代碼輸出結果
rootdir = "C:\python\day2" # 指明被遍歷的文件夾 print(type(rootdir),rootdir) print(type(os.walk(rootdir)),os.walk(rootdir))
結果:
<class 'str'> C:\python\day2 <class 'generator'> <generator object walk at 0x0000000001E05408>
打印單個目錄的子節點爲列表形式
print(os.listdir(rootdir))
結果:
['file_name.txt.txt', 'machangwei', 'mobiles.txt', 'test.py', '今日大綱']
3、文件操做
path = "E:\\test.txt" fileHandle = open ( path, 'w' ) fileHandle.write ( 'hello\nmy name is machangwei.' ) fileHandle.close() #文件有打開,有關閉,中間是對文件的操做。文件不存在就會建立,默認對同一文件再次寫入時爲覆蓋,加參數a才能追加內容
print(type(fileHandle),fileHandle)
結果:
<class '_io.TextIOWrapper'> <_io.TextIOWrapper name='E:\\test.txt' mode='w' encoding='cp936'>
追加數據:
path = "E:\\test.txt" fileHandle = open ( path, 'a' ) fileHandle.write ( '\n\nI,m 12 years old' ) fileHandle.close()
結果:
讀取windos文件數據:
fileHandle = open ( 'E:\\test.txt' ) print (fileHandle.read()) fileHandle.close()
結果:
文件關閉前打印讀取文件內容,不然報錯:
對文件第一行打印:
path = "E:\\test.txt" fileHandle = open ( path ) print(fileHandle.readline()) fileHandle.close()
結果:
對文件每行打印:
path = "E:\\test.txt" fileHandle = open ( path ) fileList = fileHandle.readlines() for fileLine in fileList: print (">>",fileLine) #打印每行內容,多出一個空行 fileHandle.close() print(fileList) #文件每行都是一個列表元素
結果:
>> hello >> my name is machangwei. >> >> I,m 12 years old ['hello\n', 'my name is machangwei.\n', '\n', 'I,m 12 years old']
在文件中一次讀取幾個字節的內容:
內容:
path = "E:\\test.txt" fileHandle = open ( path ) print ('1',fileHandle.read ( 1 )) print ('2',fileHandle.read ( 1)) #讀取指針後一個字符 print ('3',fileHandle.read ( 1 )) print ('4',fileHandle.read ( 1)) print ('5',fileHandle.read ( 1)) print ('6',fileHandle.read ( 1)) print ('7',fileHandle.read ( 1)) print ('8',fileHandle.read ( 1)) print ('9',fileHandle.read ( 1))
結果:
1 h 2 e 3 l 4 l 5 o 6 7 m 8 y 9
path = "E:\\test.txt"
fileHandle = open ( path )
fileHandle.seek ( 4) #hello . seek指針定位到第幾個字符
print (fileHandle.read ( 1 ))
fileHandle.seek ( 1)
print (fileHandle.read ( 4 )) #讀取指針後幾個字符
結果:
o
ello
再次從頭讀取文件:
path = "E:\\test.txt" fileHandle = open ( path ) garbage = fileHandle.readline() print('第1行',garbage) garbage = fileHandle.readline() print("第二行:",garbage) garbage = fileHandle.readline() print("第三行",garbage) garbage = fileHandle.readline() print("第四行",garbage) garbage = fileHandle.readline() print("第五行",garbage) garbage = fileHandle.readline() print("第六行",garbage) print('-------------') fileHandle.seek ( 0 ) print (fileHandle.readline()) fileHandle.close()
結果:
第1行 hello 第二行: my name is machangwei. 第三行 #空行 第四行 I,m 12 years old 第五行 #沒有第5,6行可是指針仍在末尾,能繼續讀不報錯,可是沒有內容輸出 第六行 ------------- hello #指針從新定位,此處爲定位到文件開頭,能夠從新從頭讀取文件
輸出指針位置:
path = "E:\\test.txt" fileHandle = open ( path ) print (fileHandle.readline()) print (fileHandle.tell() ) #輸出指針位置 print (fileHandle.readline())
結果:
hello 7 #此處有 \ n 換行符,因此多了兩個字節 my name is machangwei.
python沒有二進制類型,但能夠存儲二進制類型的數據,就是struct模塊。此處略。
4、os模塊
os.getcwd() 獲取當前工做目錄,即當前python腳本工做的目錄路徑 os.chdir("dirname") 改變當前腳本工做目錄;至關於shell下cd os.curdir 返回當前目錄: ('.') os.pardir 獲取當前目錄的父目錄字符串名:('..') os.makedirs('dirname1/dirname2') 可生成多層遞歸目錄 os.removedirs('dirname1') 若目錄爲空,則刪除,並遞歸到上一級目錄,如若也爲空,則刪除,依此類推 os.mkdir('dirname') 生成單級目錄;至關於shell中mkdir dirname os.rmdir('dirname') 刪除單級空目錄,若目錄不爲空則沒法刪除,報錯;至關於shell中rmdir dirname os.listdir('dirname') 列出指定目錄下的全部文件和子目錄,包括隱藏文件,並以列表方式打印 os.remove() 刪除一個文件 os.rename("oldname","newname") 重命名文件/目錄 os.stat('path/filename') 獲取文件/目錄信息 os.sep 輸出操做系統特定的路徑分隔符,win下爲"\\",Linux下爲"/" os.linesep 輸出當前平臺使用的行終止符,win下爲"\t\n",Linux下爲"\n" os.pathsep 輸出用於分割文件路徑的字符串 os.name 輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix' os.system("bash command") 運行shell命令,直接顯示 os.environ 獲取系統環境變量 os.path.abspath(path) 返回path規範化的絕對路徑 os.path.split(path) 將path分割成目錄和文件名二元組返回 os.path.dirname(path) 返回path的目錄。其實就是os.path.split(path)的第一個元素 os.path.basename(path) 返回path最後的文件名。如何path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素 os.path.exists(path) 若是path存在,返回True;若是path不存在,返回False os.path.isabs(path) 若是path是絕對路徑,返回True os.path.isfile(path) 若是path是一個存在的文件,返回True。不然返回False os.path.isdir(path) 若是path是一個存在的目錄,則返回True。不然返回False os.path.join(path1[, path2[, ...]]) 將多個路徑組合後返回,第一個絕對路徑以前的參數將被忽略 os.path.getatime(path) 返回path所指向的文件或者目錄的最後存取時間 os.path.getmtime(path) 返回path所指向的文件或者目錄的最後修改時間
工做環境:
import os print(os.environ)
結果:
[root@lb02 pyc]# python 2.py {'LESSOPEN': '||/usr/bin/lesspipe.sh %s', 'SSH_CLIENT': '10.0.0.253 52839 22', 'LOGNAME': 'root', 'USER': 'root', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin', 'HOME': '/root', 'LANG': 'en_US.UTF-8', 'TERM': 'linux', 'SHELL': '/bin/bash', 'SHLVL': '1', 'HISTSIZE': '1000', 'XDG_RUNTIME_DIR': '/run/user/0', 'XDG_SESSION_ID': '40', '_': '/usr/bin/python', 'SSH_CONNECTION': '10.0.0.253 52839 10.0.0.6 22', 'SSH_TTY': '/dev/pts/0', 'OLDPWD': '/python', 'HOSTNAME': 'lb02', 'HISTCONTROL': 'ignoredups', 'PWD': '/python/pyc', 'MAIL': '/var/spool/mail/root', 'LS_COLORS': 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:'}
python 中的split()函數和os.path.split()函數
結果:
5、文件操做
#彷佛有問題 os.mknod("test.txt") 建立空文件
fp = open("test.txt",w) 直接打開一個文件,若是文件不存在則建立文件
關於open 模式:
w 以寫方式打開,
a 以追加模式打開 (從 EOF 開始, 必要時建立新文件)
r+ 以讀寫模式打開
w+ 以讀寫模式打開 (參見 w )
a+ 以讀寫模式打開 (參見 a )
rb 以二進制讀模式打開
wb 以二進制寫模式打開 (參見 w )
ab 以二進制追加模式打開 (參見 a )
rb+ 以二進制讀寫模式打開 (參見 r+ )
wb+ 以二進制讀寫模式打開 (參見 w+ )
ab+ 以二進制讀寫模式打開 (參見 a+ )
fp.read([size]) #size爲讀取的長度,以byte爲單位
fp.readline([size]) #讀一行,若是定義了size,有可能返回的只是一行的一部分
fp.readlines([size]) #把文件每一行做爲一個list的一個成員,並返回這個list。其實它的內部是經過循環調用readline()來實現的。若是提供size參數,size是表示讀取內容的總長,也就是說可能只讀到文件的一部分。
fp.write(str) #把str寫到文件中,write()並不會在str後加上一個換行符
fp.writelines(seq) #把seq的內容所有寫到文件中(多行一次性寫入)。這個函數也只是忠實地寫入,不會在每行後面加上任何東西。
fp.close() #關閉文件。python會在一個文件不用後自動關閉文件,不過這一功能沒有保證,最好仍是養成本身關閉的習慣。 若是一個文件在關閉後還對其進行操做會產生ValueError
fp.flush() #把緩衝區的內容寫入硬盤
fp.fileno() #返回一個長整型的」文件標籤「
fp.isatty() #文件是不是一個終端設備文件(unix系統中的)
fp.tell() #返回文件操做標記的當前位置,以文件的開頭爲原點
fp.next() #返回下一行,並將文件操做標記位移到下一行。把一個file用於for … in file這樣的語句時,就是調用next()函數來實現遍歷的。
fp.seek(offset[,whence]) #將文件打操做標記移到offset的位置。這個offset通常是相對於文件的開頭來計算的,通常爲正數。但若是提供了whence參數就不必定了,whence能夠爲0表示從頭開始計算,1表示以當前位置爲原點計算。2表示以文件末尾爲原點進行計算。須要注意,若是文件以a或a+的模式打開,每次進行寫操做時,文件操做標記會自動返回到文件末尾。
fp.truncate([size]) #把文件裁成規定的大小,默認的是裁到當前文件操做標記的位置。若是size比文件的大小還要大,依據系統的不一樣多是不改變文件,也多是用0把文件補到相應的大小,也多是以一些隨機的內容加上去。
fp.read([size])
path = "E:\\test.txt" fp = open ( path ) print(fp) fr=fp.read(4) #讀取四個字節 print(fr)
結果:
<_io.TextIOWrapper name='E:\\test.txt' mode='r' encoding='cp936'> hell
fp.readline([size])
path = "E:\\test.txt" fp = open ( path ) print(fp.readline(4)) print(fp.readline(4)) print(fp.readline(4)) print(fp.readline(4))
結果:
hell
o
my n
ame
readlines
path = "E:\\test.txt" fp = open ( path ) print(fp.readlines())
結果:
['hello\n', 'my name is machangwei.\n', '\n', 'I,m 12 years old']
fp.write
path = "E:\\test.txt" fp = open ( path ,'a+') fp.write('\nxiaoma') #若是文件的最後字符不是換行符,要想另起一行輸入內容,須要加換行符 fp.close() print('-----------------') fp = open ( path ) for fp in fp.readline(): print(fp) print('-----------------') fp = open ( path ) for fp in fp.readlines(): print(fp)
結果:
----------------- h e l l o ----------------- hello my name is machangwei. I,m 12 years old xiaoma
目錄操做:
os.mkdir("file") 建立目錄
複製文件:
shutil.copyfile("oldfile","newfile") oldfile和newfile都只能是文件
shutil.copy("oldfile","newfile") oldfile只能是文件夾,newfile能夠是文件,也能夠是目標目錄
複製文件夾:
shutil.copytree("olddir","newdir") olddir和newdir都只能是目錄,且newdir必須不存在
重命名文件(目錄)
os.rename("oldname","newname") 文件或目錄都是使用這條命令
移動文件(目錄)
shutil.move("oldpos","newpos")
刪除文件
os.remove("file")
刪除目錄
os.rmdir("dir")只能刪除空目錄
shutil.rmtree("dir") 空目錄、有內容的目錄均可以刪
轉換目錄
os.chdir("path") 換路徑
7、序列號
對象序列化(--->str)
import json xiaoma=['wo',"shi",{'xing':'mo','ming':('jiang',None, 1.0, 2)}] print (json.dumps(xiaoma)) print(type(xiaoma),type(json.dumps(xiaoma)))
結果:
["wo", "shi", {"xing": "mo", "ming": ["jiang", null, 1.0, 2]}] <class 'list'> <class 'str'>
序列號並排序
import json print (json.dumps({"c": 3, "b": 2, "a": 1}, sort_keys=True))
結果:
{"a": 1, "b": 2, "c": 3}
類型都是字符串:
import json print (json.dumps([1,2,3,{'4': 5, '6': 7}], sort_keys=True, separators=(',',':'))) print (json.dumps([1,2,3,{'4': 5, '6': 7}], sort_keys=True, separators=('/','-'))) print (json.dumps({'4': 5, '6': 7}, sort_keys=True,indent=2, separators=(',', ': '))) print (json.dumps({'a':1,(1,2):123},skipkeys=True))
結果:
[1,2,3,{"4":5,"6":7}] #排序 [1/2/3/{"4"-5/"6"-7}] #修改分隔符 { #鍵值對的縮進的排列 "4": 5, "6": 7 } {"a": 1} #值不爲str,則忽略這一項
保存非字符型數據內容:
方法一: #非字符串沒法保存到文件
import json obj = ['sheng', {'shi': ('xian', None, 1.0, 2)}] with open(r"E:\\test.txt","w+") as f: json.dump(obj,f) 方法二: # path = "E:\\test.txt" # fileHandle = open ( path, 'w' ) # obj = ['sheng', {'shi': ('xian', None, 1.0, 2)}] # fileHandle.write ( str(obj) ) # fileHandle.close()
結果:
反序列化:
import json obj = ['sheng', {'shi': ('xian', None, 1.0, 2)}] a= json.dumps(obj) b=str(obj) print (json.loads(a)) print(type(json.loads(a)),type(a),type(b)) #a,b爲字符串,json能將json.dumps生成的字符反序列化,不能將str生成的字符反序列化
結果:
['sheng', {'shi': ['xian', None, 1.0, 2]}] <class 'list'> <class 'str'> <class 'str'>
將文本中的字符反序列化
import json with open(r"E:\\test.txt","r") as f: ma=json.load(f) print (type(ma),ma)
結果:
<class 'list'> ['sheng', {'shi': ['xian', None, 1.0, 2]}]
------------------------------------------------
sys
1.
import sys
print(sys.version)
二、
import sys
print (sys.argv[0])
print (sys.argv[1])
3
import sys
sys.exit(1)
正常退出碼設置
4
print(sys.path)
[root@lb02 pyc]# python 2.py
['/python/pyc', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/usr/lib64/python2.7/lib-tk', '/usr/lib64/python2.7/lib-old', '/usr/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7/site-packages', '/usr/lib64/python2.7/site-packages/gtk-2.0', '/usr/lib/python2.7/site-packages']
===================================================
hashlib
import hashlib hash = hashlib.sha1() hash.update(bytes('admin', encoding='utf-8')) print(hash.hexdigest())
結果:
d033e22ae348aeb5660fc2140aec35850c4da997
pycharm上執行結果
xshell上執行用下面:
import hashlib hash = hashlib.sha1() hash.update(str('admin')) print(hash.hexdigest())
結果:
[root@lb02 pyc]# python 2.py d033e22ae348aeb5660fc2140aec35850c4da997
更多請參考:http://www.cnblogs.com/wupeiqi/articles/5501365.html
--------=============================================================
random
import random print(random.random()) print(random.randint(1, 2)) #1-2的整數隨機 print(random.randrange(1, 10)) #1-10的隨機
[root@lb02 pyc]# python 2.py 0.111348076397 2 8