python3: 文件與IO

1.讀寫文本數據

# Write chunks of text data
with open('somefile.txt', 'wt') as f:
    f.write(text1)

# Redirected print statement
with open('somefile.txt', 'wt') as f:
    print(line1, file=f)

'''
文件的讀寫操做默認使用系統編碼,能夠經過調用 sys.getdefaultencoding() 來獲得。 在大多數機器上面都是utf-8編碼
'''
f = open('sample.txt', 'rt', encoding='utf-8')

統一模式處理換行符。 這種模式下,在讀取文本的時候,Python能夠識別全部的普通換行符並將其轉換爲單個 \n 字符。 相似的,在輸出時會將換行符 \n 轉換爲系統默認的換行符。 若是你不但願這種默認的處理方式,能夠給 open() 函數傳入參數 newline='' ,就像下面這樣:函數

# Read with disabled newline translation
with open('somefile.txt', 'rt', newline='') as f:
    ...

2. 打印輸出至文件

with open('d:/work/test.txt', 'wt') as f:
    print('Hello World!', file=f)

3. 使用其餘分隔符或行終止符打印

使用在 print() 函數中使用 sep 和 end 關鍵字參數,  改變默認的分隔符或者行尾符測試

>>> print('ACME', 50, 91.5)
ACME 50 91.5
>>> print('ACME', 50, 91.5, sep=',')
ACME,50,91.5
>>> print('ACME', 50, 91.5, sep=',', end='!!\n')
ACME,50,91.5!!
>>>

#end參數也能夠在輸出中禁止換行。
>>> for i in range(3):
...     print(i)
...
0
1
2

>>> for i in range(3):
...     print(i, end=' ')
...
0 1 2 >>>
#str.join()也能夠控制分隔符
>>> print(','.join(('ACME','50','91.5')))
ACME,50,91.5
>>>
>>> row = ('ACME', 50, 91.5)
>>> print(','.join(row))
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
TypeError: sequence item 1: expected str instance, int found
>>> print(','.join(str(x) for x in row))
ACME,50,91.5
>>>

>>> print(*row, sep=',')
ACME,50,91.5
>>>

4. 讀寫字節文件(如:好比圖片,聲音文件等等)

5.文件不存在才能寫入編碼

6. 字符串IO操做spa

7.讀寫壓縮文件code

8.固定大小記錄的文件迭代對象

9.讀取二進制數據到可變緩衝區中[文件對象的readinto()]blog

和普通 read() 方法不一樣的是, readinto() 填充已存在的緩衝區而不是爲新對象從新分配內存再返回它們。 所以,你能夠使用它來避免大量的內存分配操做圖片

11.文件路徑名的操做[os.path]內存

12.測試文件是否存在utf-8

13.獲取文件夾中的文件列表[os.listdir()]

pyfiles = [name for name in os.listdir('somedir')
            if name.endswith('.py')]

  對於文件名的匹配,你可能會考慮使用 glob 或 fnmatch 模塊。好比:

import glob
pyfiles = glob.glob('somedir/*.py')

from fnmatch import fnmatch
pyfiles = [name for name in os.listdir('somedir')
            if fnmatch(name, '*.py')]

 若是你還想獲取目錄中實體名列表的元信息,好比文件大小,修改時間等等, 你或許還須要使用到 os.path 模塊中的函數或着 os.stat() 函數來收集數據。

14. 忽略文件名編碼

相關文章
相關標籤/搜索