Python雜篇

 一:文件保存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中os.path.join和join的區別

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]}]

pickle模塊 略

------------------------------------------------

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
相關文章
相關標籤/搜索