1. 程式人生 > >python文件流

python文件流

-s group write ria nbsp 如果 .com 文件 結合

打開文件

文件的基本方法

叠代文件內容

打開文件

打開文件,可以使用自動導入的模塊io中的函數open。函數open將文件名作為唯一必不可少的參數,並返回一個文件對象。如果只指定一個文件名,則獲得一個可讀取的文件對象。

如果當前目錄中有此文件則可以打開,如果位於其他位置則需要指定完整的路徑,如果指定文件不存在,則如下報錯。

技術分享圖片

文件模式

如果需要寫入文件,則需要通過指定模式。函數open的參數模式常見有如下:

模式

描述

‘r‘

讀取模式(默認)

‘w‘

寫入模式(文件不存在時創建它)

‘t‘

文本模式(默認,與其他模式結合使用)

‘x‘

獨占寫模式,新建一個文件,如果該文件已存在則會報錯。

‘a‘

附加模式(在既有文件末尾繼續寫入)

‘b‘

二進制模式(與其他模式結合使用)

‘+‘

打開一個文件進行更新(可讀可寫,與其他模式結合使用)

默認模式為‘rt‘,讀取時將自動替換其他行尾字符(‘\r‘,‘\r\n‘),寫入時將‘\n‘替換為系統的默認行尾字符(os.linesep)

要打開一個文本文件進行讀寫,可使用‘r+‘,但是會將既有內容刪除,而‘w+‘不會。

文件的基本方法

讀取和寫入

管道重定向輸出

隨機存取

讀取和寫入行

關閉文件

文件最重要的功能就是提供和接收數據。在文本和二進制模式下,基本上分別將str和bytes類用作數據。

讀取和寫入:

技術分享圖片

使用read讀取數據,默認讀取全部內容。還可以指定參數,然後讀取剩下的全部內容:

技術分享圖片

管道重定向輸出

將一個命令的標準輸出鏈接到下個命令的標準輸入:

#cat some.txt

you are bad boy

 

#cat some.py

#!/usr/bin/evn python

# 計算sys.stdin中包含多少個單詞的腳本

import sys

text = sys.stdin.read()

words = text.split()

wordcount = len(words)

print(wordcount)

 

#cat some.txt | python3 some.py
4

隨機存取

可以使用方法seek和tell。

seek(offset,[, whence])將當前位置移到offset(指定字節數)和whence指定的地方(參數whence默認為io.SEEK_SET(0),偏移量是相對於文件開頭的,而io.SEEK_SET(1),相對於當前位置進行移動,io.SEEK_SET(2),相對於文件末尾進行移動)

tell()返回當前位於文件的什麽位置。

技術分享圖片

對行的讀取和寫入

可以使用方法readline,不指定參數默認讀取一行並返回,指定參數為最多讀取多少個字符。要讀取文件中所有的行,並以列表的方式返回它們,可以使用方法readlines。方法writelines接受一個字符串列表寫入文件中。

技術分享圖片

技術分享圖片

# 修改文件

技術分享圖片

關閉文件

避免鎖定文件以防止修改,避免用完系統可能指定的文件打開配額。

確保文件關閉,可以使用try/finally語句。

try# 將數據寫入到文件中

finally:

file.close()


with語句可以讓你打開一個文件並賦值到一個變量,到達該句末尾時,將自動關閉文件,即便出現異常。

with open(somefile.txt) as somefile

do_something(somefile)

叠代文件內容

def process(string):
print(Processing:, string)

# 每次叠代一個字符
with open(fileone.txt) as f:
  while True:
        char = f.read(1)
  if not char: break
  process(char)

#每次叠代一行字符
with open(fileone.txt) as f:
    while True:
    line = f.readline()
                                                                                                                                                          process(line)

#讀取所有內容,使用read
with open(fileone.txt) as f:                                                                                                                                                                                          for char in f.read():
    process(char)

#使用readlines
with open(fileone.txt) as f:                                                                                                                                                                                                                                    for char in f.readlines():
    process(char)

# 使用fileinput實現延遲叠代,讀取實際需要文本的部分
import fileinput
for line in fileinput.input(fileone.txt):
    process(line)
 

文件叠代器

叠代文件

with open(fileone.txt) as f:
  
for line in f:
  process(line)

不將文件對象賦給變量叠代文件

for line in open(fileone.txt):
    process(line)

對叠代器的操作也可以對文件做,如list(open(fileone.txt)):

>>> f = open(fileone.txt, w)

>>> print(First, line, file=f)

>>> print(Second, line, file=f)

>>> f.close()


>>> lines = list(open(fileone.txt))

>>> lines

[First line\n, Second line\n]

python文件流