r | 只讀,默認 |
w | 只寫,打開前清空文件內容 |
a | 追加 |
a+ | 讀寫,寫到文件末尾 |
w+ | 可讀寫,清空文件內容 |
r+ | 可讀寫,能寫到文件任何位置 |
rb | 二進制模式讀 |
wb | 二進制模式寫,清空文件內容 |
1
2
3
4
5
6
7
8
9
10
11
12
|
>>> f = open ( 'test.txt' , 'r' ) >>> f. f.__class__( f.__new__( f.encoding f.readinto( f.__delattr__( f.__reduce__( f.errors f.readline( f.__doc__ f.__reduce_ex__( f.fileno( f.readlines( f.__enter__( f.__repr__( f.flush( f.seek( f.__exit__( f.__setattr__( f.isatty( f.softspace f.__format__( f.__sizeof__( f.mode f.tell( f.__getattribute__( f.__str__( f.name f.truncate( f.__hash__( f.__subclasshook__( f.newlines f.write( f.__init__( f.close( f. next ( f.writelines( f.__iter__( f.closed f.read( f.xreadlines( |
f.read([size]) | 讀取size字節,當未指定或給負值時,讀取剩餘所有的字節,作爲字符串返回 |
f.readline([size]) | 從文件中讀取下一行,作爲字符串返回。如果指定size則返回size字節 |
f.readlines([size]) | 讀取size字節,當未指定或給負值時,讀取剩餘所有的字節,作爲列表返回 |
f.write(str) | 寫字符串到文件 |
f.writelines(seq) | 寫序列到文件,seq必須是一個可迭代對象,而且要是一個字符串序列 |
f.seek(offset[, whence=0]) | 在文件中移動文件指針,從whence(0代表文件起始位置,默認。1代表當前位置。2代表文件末尾)偏移offset個字節 |
f.tell() | 返回當前在文件中的位置 |
f.close() |
關閉文件 |
f.flush | 刷新緩衝區到磁盤 |
1
2
3
4
5
|
# cat test.txt 1.Python 2.Java 3.C + + 4.Ruby |
1
2
3
|
>>> f = open ( 'test.txt' , 'r' ) >>> f.read() '1.Python\n2.Java\n3.C++\n4.Ruby\n' |
1
2
3
|
>>> f = open ( 'test.txt' , 'r' ) >>> f.read( 9 ) # 獲取指定字節 '1.Python\n' |
1
2
3
4
5
|
>>> f = open ( 'test.txt' , 'r' ) >>> f.readline() '1.Python\n' >>> f.readline() '2.Java\n' |
1
2
3
|
>>> f = open ( 'test.txt' , 'r' ) >>> f.readlines() [ '1.Python\n' , '2.Java\n' , '3.C++\n' , '4.Ruby\n' ] |
1
2
3
4
5
6
7
8
9
|
>>> f = open ( 'test.txt' , 'a' ) # 以追加方式打開文件 >>> f.write( "5.Shell\n" ) # 這一步並沒有真正寫到文件 >>> f.flush() # 刷新到磁盤才寫到文件 # cat test.txt 1.Python 2.Java 3.C + + 4.Ruby 5.Shell |
1
2
3
4
5
6
7
8
9
10
|
>>> f = open ( 'test.txt' , 'a' ) >>> f.writelines([ 'a' , 'b' , 'c' ]) >>> f.flush() # cat test.txt 1.Python 2.Java 3.C + + 4.Ruby 5.Shell abc |
1
2
3
4
5
6
7
8
9
|
>>> f = open ( 'test.txt' , 'r' ) >>> f.tell() 0 >>> f.seek( 9 ) >>> f.tell() 9 >>> f.seek( 5 , 1 ) # 1表示從當前位置開始 >>> f.tell() 14 |
1
2
3
4
5
6
7
8
9
10
11
12
|
>>> f = open ( 'test.txt' , 'r' ) >>> f.tell() 0 >>> f.readline() '1.Python\n' >>> f.tell() 9 >>> f.readline() '2.Java\n' >>> f.tell() 16 >>> f.close() # 使用完後關閉文件 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#!/usr/bin/python # -*- coding: utf-8 -*- f = open ( 'test.txt' , 'r' ) data = f.read() data = "test\n" + data f = open ( 'test.txt' , 'w' ) f.write(data) f.flush() f.close() # python test.py # cat test.txt test 1.Python 2.Java 3.C + + 4.Ruby |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#!/usr/bin/python # -*- coding: utf-8 -*- f = open ( 'test.txt' , 'r' ) data_list = f.readlines() # 經測試,此方法比下面迭代效率高 # data_list = [] # for line in f: # data_list.append(line) data_list.insert( 1 , 'test\n' ) # data = ''.join(data) f = open ( 'test.txt' , 'w' ) # f.write(data) f.writelines(data_list) f.flush() f.close # python test.py # cat test.txt 1.Python test 2.Java 3.C + + 4.Ruby |
1
2
3
4
5
6
7
8
9
|
#!/usr/bin/python # -*- coding: utf-8 -*- f = open ( 'test.txt' , 'r' ) data_list = f.readlines() data_list.insert( 2 - 1 , 'test\n' ) # 在指定行減去一行就是上一行了,下一行插入同理 f = open ( 'test.txt' , 'w' ) f.writelines(data_list) f.flush() f.close |
1
2
3
4
5
6
7
8
9
|
#!/usr/bin/python # -*- coding: utf-8 -*- f = open ( 'test.txt' , 'r' ) data_list = f.readlines() data_list.pop( 2 ) f = open ( 'test.txt' , 'w' ) f.writelines(data_list) f.flush() f.close |
1
2
3
4
5
6
7
8
|
#!/usr/bin/python # -*- coding: utf-8 -*- f = open ( 'test.txt' , 'r' ) data_list = f.readlines()[ 0 : 2 ] # 列表切片 f = open ( 'test.txt' , 'w' ) f.write(data_list) f.flush() f.close |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/usr/bin/python # -*- coding: utf-8 -*- f = open ( 'test.txt' , 'r' ) data = f.readlines() # data_list = [] # for line in data: # if line.find('Py') == -1: # 如果當前行不包含Py字符,會返回-1,否則返回下標 # data_list.append(line) data_list = [line for line in data if line.find( 'Py' ) = = - 1 ] f = open ( 'test.txt' , 'w' ) f.writelines(data_list) f.flush() f.close |
1
2
3
4
5
6
7
8
9
|
#!/usr/bin/python # -*- coding: utf-8 -*- f = open ( 'test.txt' , 'r' ) data = f.read() data.replace( 'old string' , 'new string' ) f = open ( 'test.txt' , 'w' ) f.write(data) f.flush() f.close |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#!/usr/bin/python # -*- coding: utf-8 -*- f = open ( 'test.txt' , 'r' ) data = f.readlines() data_list = [] for line in data: if data.index(line) = = 2 : data_list.append(line.replace( '++' , '#' )) else : data_list.append(line) f = open ( 'test.txt' , 'w' ) f.writelines(data_list) f.flush() f.close |
1
2
3
4
5
6
7
8
|
>>> f = open ( 'test.txt' ) >>> for line in f: ... print line # 每行後面會有一個換行符\n,所以會打印出來換行符,可以使用line.strip('\n')去除 ... 1.Python 2.Java 3.C + + 4.Ruby |
1
2
3
4
5
6
|
#!/usr/bin/python # -*- coding: utf-8 -*- f = open ( 'test.txt' ) while True : data = f.read( 1024 ) # 每次只讀取1024字節 if not data: break |
1
2
3
4
5
6
7
8
9
10
11
|
方法 1 : import urllib url = "http://nginx.org/download/nginx-1.10.1.tar.gz" urllib.urlretrieve(url, "nginx-1.10.1.tar.gz" ) 方法 2 : import urllib2 url = "http://nginx.org/download/nginx-1.10.1.tar.gz" f = urllib2.urlopen(url).read() with open ( "nginx-1.10.1.tar.gz" , "wb" ) as data: data.write(f) |
fileinput.input([files[, inplace[, backup[, mode[, openhook]]]]]) | |
fileinput.isfirstline() | 檢查當前行是否是文件的第一行 |
fileinput.lineno() | 返回當前已經讀取行的數量 |
fileinput.fileno() | 返回當前文件數量 |
fileinput.filelineno() | 返回當前讀取行的行號 |
fileinput.filename() | 返回當前文件名 |
1
2
3
4
5
6
7
8
9
10
11
|
#!/usr/bin/python # -*- coding: utf-8 -*- import fileinput for line in fileinput. input ( 'test.txt' ): print line # python test.py 1.Python 2.Java 3.C + + 4.Ruby |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#!/usr/bin/python # -*- coding: utf-8 -*- import fileinput for line in fileinput. input ( 'test.txt' ): print fileinput.filelineno() print line, # 逗號忽略換行符 # python test.py 1 1.Python 2 2.Java 3 3.C + + 4 4.Ruby |
1
2
3
4
5
6
|
#!/usr/bin/python # -*- coding: utf-8 -*- import fileinput for line in fileinput. input ( 'test.txt' , backup = '.bak' , inplace = 1 ): line = line.replace( '++' , '#' ) print line, |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#!/usr/bin/python # -*- coding: utf-8 -*- import fileinput for line in fileinput. input ([ 'test.txt' , 'test2.txt' ]): print line, 12.4 . 5 實時讀取文件新增內容,類似tail - f #!/usr/bin/python # -*- coding: utf-8 -*- with open ( 'access.log' ) as f: f.seek( 0 , 2 ) # 每次打開文件都將文件指針移動到末尾 while True : line = f.readline() if line: print line, |
1
2
3
4
5
6
7
8
9
10
11
|
#!/usr/bin/python # -*- coding: utf-8 -*- import time with open ( 'access.log' ) as f: f.seek( 0 , 2 ) while True : line = f.readline() if line: print line, else : time.sleep( 1 ) |
shutil.copyfile(src, dst) | 複製文件 |
shutil.copytree(src, dst) | 複製文件或目錄 |
shutil.move(src, dst) | 移動文件或目錄 |
shutil.rmtree(path,ignore_errors=False, onerror=None) | 遞歸刪除目錄。os.rmdir()不能刪除有文件的目錄,就可以用這個了 |
shutil.make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, dry_run=0, owner=None, group=None, logger=None) |
1
2
3
4
5
6
7
|
#!/usr/bin/python # -*- coding: utf-8 -*- f = open ( 'test.txt' ) try : data = f.read() finally : f.close() |
1
2
3
4
|
#!/usr/bin/python # -*- coding: utf-8 -*- with open ( 'test.txt' ) as f: data = f.read() |