python文件流


打開文件

文件的基本方法

迭代文件內容

 

打開文件

打開文件,可以使用自動導入的模塊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 python3

# 計算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']

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM