日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python素材和代码_python之文件和素材

發(fā)布時間:2023/12/10 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python素材和代码_python之文件和素材 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

11.1 打開文件

open函數(shù)

open(name[,mode[,buffering]])

>>>f = open(r'C:\text\somefile.txt')

11.1.1 文件模式

open函數(shù)中模式參數(shù)的常用值

'r'讀模式

'w'寫模式

'a'追加模式

'b'二進制模式

'+'讀/寫模式

通過在模式參數(shù)中使用U參數(shù)能夠在打開文件時使用通用的換行符支持模式,在這種模式下,所有的換行符/字符串(\r\n,\r或者是\n)都被轉(zhuǎn)換成\n,而不用考慮運行的平臺。

11.1.2 緩沖

open函數(shù)的第三個參數(shù)控制者文件的緩沖。如果參數(shù)是0或者False,I/O無緩沖的;如果是1或者True,就是有緩沖,大于1的數(shù)字代表緩沖區(qū)的大小,-1代表使用默認的緩沖區(qū)大小

11.2 基本文件方法

三種標準的流

數(shù)據(jù)輸入得標準源是sys.stdin。

要打印的文本保存在sys.stdout內(nèi)。

錯誤信息被寫入sys.stderr.

11.2.1 讀和寫

文件最重要的能力是提供或者接受數(shù)據(jù)。如果一個名為f的類文件對象,那么就可以用f.write方法和f.read方法寫入和讀取數(shù)據(jù)。

每次調(diào)用f.write(string)時,所提供的參數(shù)string會被追加到文件中已存在部分的后面。

>>>f = open('somefile.txt','w')

>>>f.write('Hello, ')

>>>f.write('world!')

>>>f.close()

在完成了對一個文件的操作時,調(diào)用close。

例子:接上例:

>>>f = open('somefile.txt','r')

>>>f.read(4)

'Hello'

>>>f.read()

'o.World!'

首先指定了我要讀取的字符數(shù)“4”,然后讀取了剩下的文件。注意,在調(diào)用open時可以省略模式說明,因為'r'是默認的。

11.2.2 管式輸出

$cat somefile.txt | python somescript.py | sort

somescript.py會從它的sys.stdin中讀取數(shù)據(jù)(cat somefile.txt寫入的),并把結(jié)果寫入它的sys.stdout中。

統(tǒng)計sys.stdin中單詞數(shù)的簡單腳本

#somescript.py

import sys

text = sys.stdin.read()

words = text.split()

wordcount = len(words)

print 'Wordcount:',wordcount

可以用類文件對象seek和tell來直接訪問感興趣的部分(這種做法稱為 隨機訪問)

seek(offset[,whence]):這個方法把當前位置移到由offest定義的位置。whence.offset是一個字節(jié)數(shù),whence默認為0,也就是說偏移量是從文件開頭開始計算的。whence可能被設(shè)置為1或者2

>>>f = open(r'c:\text\somefile.txt','w')

>>>f.write('01234567890123456789')

>>>f.seek(5)

>>>f.write('Hello,world!')

>>>f.close()

>>>f = open(r'c:\text\somefile.txt')

>>>f.read()

'01234Hello,world!89'

tell方法返回當前文件的位置如下:

>>>f = open(r'c:\text\somefile.txt')

>>>f.read(3)

'012'

>>>f.read(2)

'34'

>>>f.tell()

5L

11.2.3 讀寫行

逐個字符讀取文件也是沒問題的,進行逐行的讀取也可以。還可以使用file.readline讀取單獨的一行。不使用任何參數(shù)或者使用一個非負的整數(shù)作為readline可以讀取的字符的最大值。因此,如果someFile.readline()返回‘Hello,World!\n’,someFile.readline(5)返回‘Hello’。readlines方法可以讀取一個文件中的所有行并將其作為列表返回。

writelines方法和readlines相反:傳給它的一個字符串的列表,它會把所有的字符串寫入文件。注意,程序不會增加新行,需要自己添加。沒有writeline方法,因為能使用write。

11.2.3 關(guān)閉文件

如果想確保文件被關(guān)閉了,那么應(yīng)該使用try/finally語句,并且在finally子句中調(diào)用close方法。

#Open your file here

try:

#Write data to your file

finally:

file.close()

事實上,有專門為這種情況設(shè)計的語句,with語句:

with open("somefile.txt") as somefile:

do_something(somefile)

with語句可以打開文件并且將其賦值到變量上。之后就可以將數(shù)據(jù)寫入語句體中的文件。文件在語句結(jié)束后會被自動關(guān)閉,即使是由于異常引起的結(jié)束也是如此。

在python 2.5 中,with語句只有在導(dǎo)入如下的模塊后才可以用:

from __future__ import with_statement

直到關(guān)閉文件才會寫入文件。如果想繼續(xù)使用文件,又想將磁盤上的文件進行更新,以反映這些修改,那么需要調(diào)用文件對象的flush方法。

上下文管理器

with語句實際上是很通用的結(jié)構(gòu),允許使用所謂的上下文管理器。上下文管理器是一種支持__enter__ 和__exit__ 方法的對象。

__enter__方法不帶參數(shù),它在進入with語句塊的時候被調(diào)用,返回值綁定到在as關(guān)鍵字之后的變量。

__exit__方法帶有3個參數(shù):異常類型、異常對象和異常回溯。在離開方法時這個函數(shù)被調(diào)用。如果__exit__返回false,那么所有的異常都不會被處理。它們的__enter__方法返回文件對象本身,__exit__方法關(guān)閉文件。

11.2.5 使用基本文件方法

一個簡單文本文件

Welcome to this file

There is nothing here except

This stupid haiku

首先是read(n):

>>>f = open(r'c:\text\somefile.txt')

>>>f.read(7)

'Welcome'

>>>f.read(4)

'to'

>>>f.close()

然后是read():

>>>f = open(r'c:\text\somefile.txt')

>>>print f.read()

Welcome to this file

There is nothing here except

This stupid haiku

>>>f.close()

接著是readline():

>>>f = open(r'c:\text\somefile.txt')

>>>for i in range(3):

print str(i) + ': ' + f.readline(),

0:Welcome to this file

1:There is nothing here except

2:This stupid haiku

>>>f.close()

以及readlines():

>>import pprint

>>>pprint.pprint(opne(r'c:\text\somefile.txt').readlines())

['Welcome to this file\n'

'There is nothing here except\n'

'This stupid haiku']

注意,本例中我所使用的是文件對象自動關(guān)閉的方式。

下面是寫文件,首先是write(string):

>>>f = open(r'c:\text\somefile.txt','w')

>>>f.write('this\nis no\nhaiku')

>>>f.close()

運行后:

this

is no

haiku

最后是writelines(list):

>>>f = open(r'c:\text\somefile.txt')

>>>lines = f.readlines()

>>>f.close()

>>>line[1] = "isn't a\n"

>>>f = open(r'c:\text\somefile.txt','w')

>>>f.writelines(lines)

>>>f.close()

運行后:

this

isn't a

haiku

11.3.1 按字節(jié)處理

最常見的對文件內(nèi)容進行迭代的方法是while循環(huán)中使用read方法。例如,對每個字符進行循環(huán)。

用read方法對每個字符進行循環(huán)

f = open(filename)

char = f.read(1)

while char:

process(char)

char = f.read(1)

f.close()

這個程序可以使用是因為當?shù)竭_文件的末尾時,read方法返回一個空的字符串,但在那之前返回的字符串包含一個字符,如果char是真,則表示還沒有到文件末尾。

可以看到,賦值語句char = f.read(1)被重復(fù)地使用,代碼重復(fù)通常被認為是一件壞事。

用不同的方式寫循環(huán)

f = open(filename)

while True:

char = f.read(1)

if not char:break

process(char)

f.close()

11.3.2 按行操作

當處理文本文件時,經(jīng)常會對文件的行進行迭代而不是處理單個字符。處理行使用的方法和處理字符一樣,即使用readline方法:

在while循環(huán)中使用readline

f = opne(filename)

while True;

line = f.readline()

if not line: break

process(line)

f.close()

11.3.3 讀取所有內(nèi)容

如果文件不是很大,那么可以使用不帶參數(shù)的read方法一次讀取整個文件,或者使用readlines方法。

用read迭代每個字符

f = open(filename)

for char in f.read()

process(char)

f.close()

用readlines迭代行

f = open(filename)

for line in f.readlines():

process(line)

f.close()

11.3.4使用fileinput實現(xiàn)懶惰行迭代

在需要對一個非常大的文件進行迭代行的操作時,readlines會占用太多的內(nèi)存。這個時候可以使用while循環(huán)和readline方法來替代。當然,在python中如果能使用for循環(huán),那么它就是首選。本例恰好可以使用for循環(huán)可以使用一個名為懶惰行迭代的方法:說它懶惰是因為它只是讀取實際需要的文件部分。

用fileinput來對行進行迭代

import fileinput

for line in fileinput.input(filename):

process(line)

11.3.5 文件迭代器

迭代文件

f = open(filename)

for line in f:

process(line)

f.close()

對文件進行迭代而不使用變量存儲文件對象

for line in open(filename)

process(line)

注意sys.stdin是可迭代的,就像其他的文件對象。因此如果想要迭代標準輸入中的所有行,可以按如下形式使用sys.stdin.

import sys

for line in sys.stdin:

process(line)

可以對文件迭代器執(zhí)行和普通迭代器相同的操作。比如將它們轉(zhuǎn)換為字符串列表(使用list(open(filename)) ),這樣所達到的效果和使用readlines一樣。

>>>f = open('somefile.txt','w')

>>>f.write('First line\n')

>>>f.write('Second line\n')

>>>f.write('Third line\n')

>>>f.close()

>>>lines = list(open('somefile.txt'))

>>>lines

['First line\n','Second line\n','Third line\n']

>>>first,second,third = open('somefile.txt')

>>>first

'First line\n'

>>>second

'Second line\n'

>>>third

'Third line\n'

在這個例子中,有幾點重要的:

1.使用print來向文件內(nèi)寫入內(nèi)容,,這會在提供的字符串后面增加新的行

2.使用序列來對一個打開的文件進行解包操作,把每行都放入一個單獨的變量中(這么做是很有實用性的,因為一般不知道文件中有多少行,但它演示了文件對象的“迭代性”)

3.在寫文件后關(guān)閉了文件,是為了確保數(shù)據(jù)被更新到硬盤。

總結(jié)

以上是生活随笔為你收集整理的python素材和代码_python之文件和素材的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。