❶ 利用python對外部程序進行操作
代碼如下 復制代碼
object_id_list=[1, 3, 88, 99]
f=open(『mylist』, 「w」)
for id in object_id_list:
f.writelines(str(id))
f.close() #只有輸入這一句之後才會真正寫入到文件中
cat mylist
138899% # 最後有一個%表示沒有換行
>>> object_id_list=[1, 3, 88, 99]
>>> f=open(『mylist』, 「w」)
>>> for id in object_id_list:
… f.writelines(str(id) + 『\n』)
…
>>> f.close()
➜ ~ cat mylist
1
3
88
99
例子2
代碼如下 復制代碼
def processFile(inputFile, outputFile): #定義一個函數
fin = open(inputFile, 'r') #以讀的方式打開文件
fout = open(outputFile, 'w') #以寫得方式打開文件
for eachLine in fin: #讀取文件的每一行
line = eachLine.strip().decode('utf-8', 'ignore') #去除每行的首位空格,並且將文件編碼轉換成Unicode編碼
outStr = line #我沒對讀入的文本進行處理,只是直接將其輸出到文件
fout.write(outStr.strip().encode('utf-8') + 'n') #去除首位的空格,並轉回到utf-8編碼,然後輸出
fin.close() #關閉文件
fout.close()
processFile('myinputFile.txt', 'myoutputFile.txt') #調用該函數對文件進行處理
注意:1、由於Python能夠很方便的對Unicode編碼進行處理,所以最好先轉換成Unicode編程進行處理;
2、由於讀入文本後進行處理,可能會在文本末尾加上空格,所以寫入文件的時候,最好先用strip()函數清除一下首位的空格;
我使用的是Linux環境,程序寫完之後,輸入:python test.py 就能執行該程序了。
讀文件
讀文本文件
input = open('data', 'r')
#第二個參數默認為r
input = open('data')
讀二進制文件
input = open('data', 'rb')
讀取所有內容
file_object = open('thefile.txt')
try:
all_the_text = file_object.read( )
finally:
file_object.close( )
讀固定位元組
file_object = open('abinfile', 'rb')
try:
while True:
chunk = file_object.read(100)
if not chunk:
break
do_something_with(chunk)
finally:
file_object.close( )
讀每行
list_of_all_the_lines = file_object.readlines( )
如果文件是文本文件,還可以直接遍歷文件對象獲取每行:
for line in file_object:
process line
3.寫文件
寫文本文件
output = open('data', 'w')
寫二進制文件
output = open('data', 'wb')
追加寫文件
output = open('data', 'w+')
寫數據
file_object = open('thefile.txt', 'w')
file_object.write(all_the_text)
file_object.close( )
寫入多行
file_object.writelines(list_of_text_strings)
注意,調用writelines寫入多行在性能上會比使用write一次性寫入要高。
在處理日誌文件的時候,常常會遇到這樣的情況:日誌文件巨大,不可能一次性把整個文件讀入到內存中進行處理,例如需要在一台物理內存為 2GB 的機器上處理一個 2GB 的日誌文件,我們可能希望每次只處理其中 200MB 的內容。
在 Python 中,內置的 File 對象直接提供了一個 readlines(sizehint) 函數來完成這樣的事情。以下面的代碼為例:
file = open('test.log', 'r')sizehint = 209715200 # 200Mposition = 0lines = file.readlines(sizehint)while not file.tell() - position < 0: position = file.tell() lines = file.readlines(sizehint)
每次調用 readlines(sizehint) 函數,會返回大約 200MB 的數據,而且所返回的必然都是完整的行數據,大多數情況下,返回的數據的位元組數會稍微比 sizehint 指定的值大一點(除最後一次調用 readlines(sizehint) 函數的時候)。通常情況下,Python 會自動將用戶指定的 sizehint 的值調整成內部緩存大小的整數倍。
file在python是一個特殊的類型,它用於在python程序中對外部的文件進行操作。在python中一切都是對象,file也不例外,file有file的方法和屬性。下面先來看如何創建一個file對象:
file(name[, mode[, buffering]])
file()函數用於創建一個file對象,它有一個別名叫open(),可能更形象一些,它們是內置函數。來看看它的參數。它參數都是以字元串的形式傳遞的。name是文件的名字。
mode是打開的模式,可選的值為r w a U,分別代表讀(默認) 寫 添加支持各種換行符的模式。用w或a模式打開文件的話,如果文件不存在,那麼就自動創建。此外,用w模式打開一個已經存在的文件時,原有文件的內容會被清空,因為一開始文件的操作的標記是在文件的開頭的,這時候進行寫操作,無疑會把原有的內容給抹掉。由於歷史的原因,換行符在不同的系統中有不同模式,比如在 unix中是一個n,而在windows中是『rn』,用U模式打開文件,就是支持所有的換行模式,也就說『r』 'n' 'rn'都可表示換行,會有一個tuple用來存貯這個文件中用到過的換行符。不過,雖說換行有多種模式,讀到python中統一用n代替。在模式字元的後面,還可以加上+ b t這兩種標識,分別表示可以對文件同時進行讀寫操作和用二進制模式、文本模式(默認)打開文件。
buffering如果為0表示不進行緩沖;如果為1表示進行「行緩沖「;如果是一個大於1的數表示緩沖區的大小,應該是以位元組為單位的。
file對象有自己的屬性和方法。先來看看file的屬性。
closed #標記文件是否已經關閉,由close()改寫
encoding #文件編碼
mode #打開模式
name #文件名
newlines #文件中用到的換行模式,是一個tuple
softspace #boolean型,一般為0,據說用於print
file的讀寫方法:
F.read([size]) #size為讀取的長度,以byte為單位
F.readline([size])
#讀一行,如果定義了size,有可能返回的只是一行的一部分
F.readlines([size])
#把文件每一行作為一個list的一個成員,並返回這個list。其實它的內部是通過循環調用readline()來實現的。如果提供size參數,size是表示讀取內容的總長,也就是說可能只讀到文件的一部分。
F.write(str)
#把str寫到文件中,write()並不會在str後加上一個換行符
F.writelines(seq)
#把seq的內容全部寫到文件中。這個函數也只是忠實地寫入,不會在每行後面加上任何東西。
file的其他方法:
F.close()
#關閉文件。python會在一個文件不用後自動關閉文件,不過這一功能沒有保證,最好還是養成自己關閉的習慣。如果一個文件在關閉後還對其進行操作會產生ValueError
F.flush()
#把緩沖區的內容寫入硬碟
F.fileno()
#返回一個長整型的」文件標簽「
F.isatty()
#文件是否是一個終端設備文件(unix系統中的)
F.tell()
#返迴文件操作標記的當前位置,以文件的開頭為原點
F.next()
#返回下一行,並將文件操作標記位移到下一行。把一個file用於for ... in file這樣的語句時,就是調用next()函數來實現遍歷的。
F.seek(offset[,whence])
#將文件打操作標記移到offset的位置。這個offset一般是相對於文件的開頭來計算的,一般為正數。但如果提供了whence參數就不一定了,whence可以為0表示從頭開始計算,1表示以當前位置為原點計算。2表示以文件末尾為原點進行計算。需要注意,如果文件以a或a+的模式打開,每次進行寫操作時,文件操作標記會自動返回到文件末尾。
F.truncate([size])
#把文件裁成規定的大小,默認的是裁到當前文件操作標記的位置。如果size比文件的大小還要大,依據系統的不同可能是不改變文件,也可能是用0把文件補到相應的大小,也可能是以一些隨機的內容加上去。
❷ python file() 和open()有什麼區別
是file類的構造函數,參數和內置的open()函數相同。兩者都讀模式打開文件返回一個file對象,以寫模式打開文件不存在則會被創建。但是更推薦使用內置函數open()來打開一個文件,因為python3.0中沒有file了
❸ python 怎麼沒有softspace
一個文件被打開後,你有一個file對象,你可以得到有關該文件的各種信息。
以下是和file對象相關的所有屬性的列表:
file.closed 返回true如果文件已被關閉,否則返回false。
file.mode 返回被打開文件的訪問模式。
file.name 返迴文件的名稱。
file.softspace 如果用print輸出後,必須跟一個空格符,則返回false。否則返回true。
如下實例:
#!/usr/bin/python
# 打開一個文件
fo = open("foo.txt", "wb")
print "Name of the file: ", fo.name
print "Closed or not : ", fo.closed
print "Opening mode : ", fo.mode
print "Softspace flag : ", fo.softspace
以上實例輸出結果:
Name of the file: foo.txt
Closed or not : False
Opening mode : wb
Softspace flag : 0
❹ Python的文件對象問題
從python語法說吧。。。
fo 是一個變數。變數存儲在內存中的值。
open() 是一個系統函數,每次執行,不出錯的話,會返回值是一個「文件對象」。
fo = xx 是一個賦值語句。將 xx 賦值給變數 fo。
fo=open(「file.txt」,」wb」)
就是 通過 open 返回 「文件對象」,並且通過賦值語句賦值給變數 "fo"。
這樣說清楚了嗎?
另外,
fo 可以換成任何合法的變數名。(詳見python 變數 一節)
Python 變數類型
文件對象不同的原因。應該是對象裡面存儲的數據(屬性)不同。比如 fo.name 不同。(類的屬性,詳見「類和對象」一節。看對象)
Python 面向對象
❺ Python中file和open的區別
file是一個類,而用open函數打開後是返回一個file對象。
file1 = file("aa.txt")
file2 = open("aa.txt")#這個時候返回的是跟file1一樣的對象,都可以對aa.txt進行讀取,修改。
暫時發現貌似沒多大區別,習慣上喜歡用open。
❻ Python中的文件對象是什麼概念 和對象有什麼區別
Python一切皆對象。 文件對象是對象的一種。
❼ 如何給 Python 文件指針(文件對象)增加方法
這么寫當然不對,你的__init__里都沒調用_io.TextIOWrapper的__init__。按照你的描述你需要的只是一個文件api的wrapper,寫成下面這樣不是更容易么?
class myfo():
....def __init__(self,fname,mod='r'):
........self.fp=open(fname,mod)
....def nl(self,k=1):
........self.fp.write('a'*k)
........self.fp.close()
>>> fo=myfo('test.txt','w')
>>> fo.nl(3)
❽ python的編寫格式
讀取鍵盤輸入【raw_input( )或者input( )】
>>> demo = raw_input('INPUT:'); \ # \是在CMD中的換行符
... print "content is" , demo
INPUT:HELL0 MOMO
content is HELL0 MOMO
打開或關閉文件,這里要用Python的內置函數open( ),然後創建一個file對象。
Python打開文件的模式:
r 以只讀模式打開文件。
w 以只寫模式打開文件,且先把文件內容清空(truncate the file first)wb 以二進制格式打開一個文件只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
a 以添加模式打開文件,寫文件的時候總是寫到文件末尾,用seek也無用。打開的文件也是不能讀的。
r+ 以讀寫方式打開文件,文件可讀可寫,可寫到文件的任何位置。
w+ 和r+不同的是,它會truncate the file first。
a+ 和r+不同的是,它只能寫到文件末尾。
一個文件被打開後,有一個file對象,可以得到有關該文件的各種信息,以下是一些使用方法:
file.closed 返回true如果文件已被關閉,否則返回false。
file.mode 返回被打開文件的訪問模式。
file.name 返迴文件的名稱。
file.softspace 如果用print輸出後,必須跟一個空格符,則返回false。否則返回true。
舉個例子
>>> demo = open("MOMO.txt","wb")
>>> print u'是否關閉:', demo.closed
是否關閉:False
>>> print u'訪問模式:',demo.mode
訪問模式: wb
>>> print u'文件名稱:',demo.name
文件名稱:MOMO.txt
>>> print u'末尾是否加空格:',demo.softspace
末尾是否加空格:0
❾ python里怎麼樣判斷文件名和文件實例對象
python是一個動態類型的語言,這意味著任何一個給出的變數會隨著不同的場合是不同的類型,比如下面的例子中的變數,可以是整數、浮點數、或者字元串類型:
def function(value):
print(value)
function(1)
function(1.0)
function("one")
這時可以使用type()函數來檢查變數的類型,如下面的例子:
# File: builtin-type-example-1.py
def mp(value):
print(type(value), value)
mp(1)
mp(1.0)
mp("one")
輸出結果如下:
==== RESTART: D:/work/csdn/python_Game1/example/builtin-type-example-1.py ====
<class 'int'> 1
<class 'float'> 1.0
<class 'str'> one
>>>
因此可以使用type()函數來判斷一個變數是什麼類型,這里就可以用來判斷變數是字元串類型,還是文件對象,如下:
# File: builtin-type-example-2.py
def load(file):
if isinstance(file, type("")):
file = open(file, "rb")
return file.read()
print(len(load("builtin-type-example-2.py")), "bytes")
print(len(load(open("builtin-type-example-2.py", "rb"))), "bytes")
輸出結果如下:
==== RESTART: D:/work/csdn/python_Game1/example/builtin-type-example-2.py ====
273 bytes
273 bytes
>>>
在這一行代碼:
isinstance(file, type(""))
判斷是否為字元串變數。
❿ python file對象可以遍歷嗎
file不可以,不過readline方法返回是行迭代器