欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Python中的輸入和輸出功能進(jìn)行讀取和寫入的教程

 更新時(shí)間:2015年04月14日 10:40:16   投稿:goldensun  
這篇文章主要介紹了利用Python中的輸入和輸出功能進(jìn)行讀取和寫入的教程,本文來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下

讀取、寫入和 Python

編寫程序的最后一個(gè)基本步驟就是從文件讀取數(shù)據(jù)和把數(shù)據(jù)寫入文件。閱讀完這篇文章之后,可以在自己的 to-do 列表中加上檢驗(yàn)這個(gè)技能學(xué)習(xí)效果的任務(wù)。
簡單輸出

貫穿整個(gè)系列,一直用 print 語句寫入(輸出)數(shù)據(jù),它默認(rèn)把表達(dá)式作為 string 寫到屏幕上(或控制臺(tái)窗口上)。清單 1 演示了這一點(diǎn)。清單 1 重復(fù)了第一個(gè) Python 程序 “Hello, World!”,但是做了一些小的調(diào)整。
清單 1. 簡單輸出

>>> print "Hello World!"
Hello World!
>>> print "The total value is = $", 40.0*45.50
The total value is = $ 1820.0
>>> print "The total value = $%6.2f" % (40.0*45.50)
The total value = $1820.00
>>> myfile = file("testit.txt", 'w')
>>> print >> myfile, "Hello World!"
>>> print >> myfile, "The total value = $%6.2f" % (40.0*45.50)
>>> myfile.close()

正如這個(gè)示例演示的,用 print 語句寫入數(shù)據(jù)很容易。首先,示例輸出一個(gè)簡單的 string。然后創(chuàng)建并輸出復(fù)合的 string,這個(gè)字符串是用 string 格式化技術(shù)創(chuàng)建的。

但是,在這之后,事情發(fā)生了變化,與代碼以前的版本不同。接下來的一行創(chuàng)建 file 對象,傳遞進(jìn)名稱 "testit.txt" 和 'w' 字符(寫入文件)。然后使用修改過的 print 語句 —— 兩個(gè)大于號(hào)后邊跟著容納 file 對象的變量 —— 寫入相同的 string。但是這一次,數(shù)據(jù)不是在屏幕上顯示。很自然的問題是:數(shù)據(jù)去哪兒了?而且,這個(gè) file 對象是什么?

第一個(gè)問題很容易回答。請查找 testit.txt 文件,并像下面那樣顯示它的內(nèi)容。

% more testit.txt 
Hello World!
The total value = $1820.00

可以看到,數(shù)據(jù)被準(zhǔn)確地寫入文件,就像以前寫到屏幕上一樣。

現(xiàn)在,請注意清單 1 中的最后一行,它調(diào)用 file 對象的 close 方法。在 Python 程序中這很重要,因?yàn)樵谀J(rèn)情況下,文件輸入和輸出是緩沖的;在調(diào)用 print 語句時(shí),數(shù)據(jù)實(shí)際未被寫入;相反,數(shù)據(jù)是成批寫入的。讓 Python 把數(shù)據(jù)寫入文件的最簡單方式就是顯式地調(diào)用 close 方法。
文件對象

file 是與計(jì)算機(jī)上的文件進(jìn)行交互的基本機(jī)制。可以用 file 對象讀取數(shù)據(jù)、寫入數(shù)據(jù)或把數(shù)據(jù)添加到文件,以及處理二進(jìn)制或文本數(shù)據(jù)。

學(xué)習(xí) file 對象的最簡單方法就是閱讀幫助,如清單 2 所示。
清單 2. 得到 file 對象的幫助

>>> help(file)
Help on class file in module __builtin__:
class file(object)
 | file(name[, mode[, buffering]]) -> file object
 | 
 | Open a file. The mode can be 'r', 'w' or 'a' for reading (default),
 | writing or appending. The file will be created if it doesn't exist
 | when opened for writing or appending; it will be truncated when
 | opened for writing. Add a 'b' to the mode for binary files.
 | Add a '+' to the mode to allow simultaneous reading and writing.
 | If the buffering argument is given, 0 means unbuffered, 1 means line
 | buffered, and larger numbers specify the buffer size.
 | Add a 'U' to mode to open the file for input with universal newline
 | support. Any line ending in the input file will be seen as a '\n'
 | in Python. Also, a file so opened gains the attribute 'newlines';
 | the value for this attribute is one of None (no newline read yet),
 | '\r', '\n', '\r\n' or a tuple containing all the newline types seen.
 | 
 | 'U' cannot be combined with 'w' or '+' mode.
 | 
 | Note: open() is an alias for file().
 | 
 | Methods defined here:
...

正如幫助工具指出的,使用 file 對象很簡單。用 file 構(gòu)造函數(shù)或 open 方法創(chuàng)建 file 對象,open 是 file 構(gòu)造函數(shù)的別名。第二個(gè)參數(shù)是可選的,它指定文件的使用方式:

  •     'r' (默認(rèn)值)表示從文件讀取數(shù)據(jù)。
  •     'w' 表示要向文件寫入數(shù)據(jù),并截?cái)嘁郧暗膬?nèi)容。
  •     'a' 表示要向文件寫入數(shù)據(jù),但是添加到當(dāng)前內(nèi)容尾部。
  •     'r+' 表示對文件進(jìn)行讀寫操作(刪除以前的所有數(shù)據(jù))。
  •     'r+a' 表示對文件進(jìn)行讀寫操作(添加到當(dāng)前內(nèi)容尾部)。
  •     'b' 表示要讀寫二進(jìn)制數(shù)據(jù)。

這篇文章的第一個(gè)代碼清單向文件寫入數(shù)據(jù)?,F(xiàn)在,清單 3 顯示如何把這個(gè)數(shù)據(jù)讀入 Python 程序,并解析文件的內(nèi)容。
清單 3. 從文件讀取數(shù)據(jù)

>>> myfile = open("testit.txt")
>>> myfile.read()
'Hello World!\nThe total value = $1820.00\n'
>>> str = myfile.read()
>>> print str
>>> myfile.seek(0)
>>> str = myfile.read()
>>> print str
Hello World!
The total value = $1820.00
>>> str.split()
['Hello', 'World!', 'The', 'total', 'value', '=', '$1820.00']
>>> str.split('\n')
['Hello World!', 'The total value = $1820.00', '']
>>> for line in str.split('\n'):
...   print line
... 
Hello World!
The total value = $1820.00
>>> myfile.close()

要讀取數(shù)據(jù),首先要?jiǎng)?chuàng)建合適的 file 對象 —— 在這個(gè)示例中,文件對象打開 testit.txt 文件,并用 read 方法讀取內(nèi)容。這個(gè)方法把整個(gè)文件讀入一個(gè) string,然后在程序中把這個(gè)字符串輸出到控制臺(tái)。在對 read 方法的第二個(gè)調(diào)用中,試圖把值分配給 str 變量,結(jié)果返回一個(gè)空的 string。這是因?yàn)榈谝粋€(gè) read 操作讀入了整個(gè)文件。當(dāng)試圖再次讀取內(nèi)容時(shí),已經(jīng)到了文件末尾,所以什么也讀不到。

這個(gè)問題的解決方案也很簡單:讓 file 對象返回文件的開頭?;氐介_頭要通過 seek 方法進(jìn)行,它接受一個(gè)參數(shù),表示要從文件中的什么位置開始讀取或?qū)懭耄ɡ纾? 代表文件開頭)。seek 方法支持更復(fù)雜的操作,但是可能會(huì)有危險(xiǎn)。對于目前來說,我們還堅(jiān)持采用簡單方式。

現(xiàn)在回到了文件的開始之處,可以把文件內(nèi)容讀入 string 變量并對 string 做適當(dāng)?shù)亟馕?。請注意,在文件中,行之間用新行(或行結(jié)束)字符區(qū)分。如果試著在 string 上調(diào)用 split 方法,它會(huì)在空白字符(例如空格)處進(jìn)行拆分。為了讓方法根據(jù)新行字符拆分各行,必須顯式地指定新行字符。然后可以拆分 string 并在 for 循環(huán)中對文件的行進(jìn)行迭代。

看起來僅僅從文件中讀取和處理一行內(nèi)容都有許多工作要做。Python 要讓簡單的事情變?nèi)菀?,所以您可能想知道這個(gè)任務(wù)有沒有快捷方式可用。如清單 4 所示,答案是 yes。
清單 4. 讀取和解析行

>>> myfile = open("testit.txt")
>>> for line in myfile.readlines():
...   print line
... 
Hello World!
The total value = $1820.00
>>> myfile.close()
>>> for line in open("testit.txt").readlines():
...   print line
... 
Hello World!
The total value = $1820.00
>>> for line in open("testit.txt"):
...   print line
... 
Hello World!
The total value = $1820.00

清單 4 演示了讀取和解析文本文件行的三種技術(shù)。首先,打開文件并把它分配給變量。然后調(diào)用 readlines 方法,把整個(gè)文件讀入內(nèi)存并把內(nèi)容拆分成 string 列表。for 循環(huán)在 string 列表上進(jìn)行迭代,一次輸出一行。

第二個(gè) for 循環(huán)通過使用 file 對象的隱式變量(也就是說,變量不是顯式創(chuàng)建的),對這個(gè)過程稍做了點(diǎn)兒簡化。打開文件和讀取文件內(nèi)容一次完成,生成的效果與第一個(gè)顯式示例相同。最后一個(gè)示例進(jìn)一步做了簡化,并演示了直接在 file 對象上進(jìn)行迭代的能力(請注意,這是 Python 的一個(gè)新特性,所以在您的計(jì)算機(jī)上可能無法工作)。在這個(gè)示例中,創(chuàng)建隱式 file 對象,然后 Python 做余下的工作,允許對文件中的全部行進(jìn)行迭代。

但是,有些時(shí)候,在從文件讀取數(shù)據(jù)時(shí),可能想要更好的控制級(jí)別。在這種情況下,應(yīng)當(dāng)使用 readline 方法,如清單 5 所示。
清單 5. 讀取數(shù)據(jù)

>>> myfile = open("testit.txt")
>>> myfile.readline()
'Hello World!\n'
>>> myfile.readline()
'The total value = $1820.00\n'
>>> myfile.readline()
''
>>> myfile.seek(0)
>>> myfile.readline()
'Hello World!\n'
>>> myfile.tell()
13L
>>> myfile.readline()
'The total value = $1820.00\n'
>>> myfile.tell()
40L
>>> myfile.readline()
''
>>> myfile.tell()
40L
>>> myfile.seek(0)
>>> myfile.read(17)
'Hello World!\nThe '
>>> myfile.seek(0)
>>> myfile.readlines(23)
['Hello World!\n', 'The total value = $1820.00\n']
>>> myfile.close()

這個(gè)示例演示了如何在文件中移動(dòng),一次讀取一行,或者顯式地用 seek 方法移動(dòng)文件位置指示器。首先,用 readline 方法在文件行中移動(dòng)。當(dāng)?shù)竭_(dá)文件末尾時(shí),readline 方法返回一個(gè)空的 string。在過了文件末尾之后,如果還用這種方式繼續(xù)讀取,并不會(huì)造成錯(cuò)誤,只會(huì)返回空的 string。

然后返回文件開始的地方,并讀取另一行。 tell 方法顯示出在文件中的當(dāng)前位置(應(yīng)當(dāng)在第一行文本之后) —— 在這個(gè)示例中,在第 13 個(gè)字符位置。通過使用這個(gè)知識(shí),可以向 read 或readline 方法傳遞一個(gè)參數(shù),控制讀取的字符數(shù)。對于 read 方法,這個(gè)參數(shù)(在這個(gè)示例中是 17)是要從文件中讀取的字符數(shù)。但是 readline 方法在讀入指定數(shù)量的字符后,還會(huì)繼續(xù)讀取,直到行尾。在這個(gè)示例中,它讀取第一行和第二行文本。
寫入數(shù)據(jù)

迄今為止的示例都側(cè)重于讀取數(shù)據(jù),而不是寫入數(shù)據(jù)。但是如清單 6 所示,一旦了解了使用 file 對象的基礎(chǔ)知識(shí),寫入也很容易。
清單 6. 寫入數(shù)據(jù)

>>> mydata = ['Hello World!', 'The total value = $1820.00']
>>> myfile = open('testit.txt', 'w')
>>> for line in mydata:
...   myfile.write(line + '\n')
... 
>>> myfile.close()
>>> myfile = open("testit.txt")
>>> myfile.read()
'Hello World!\nThe total value = $1820.00\n'
>>> myfile.close()
>>> myfile = open("testit.txt", "r+")
>>> for line in mydata:
...   myfile.write(line + '\n')
... 
>>> myfile.seek(0)
>>> myfile.read()
'Hello World!\nThe total value = $1820.00\n'
>>> myfile.close()
>>> myfile = open("testit.txt", "r+a")
>>> myfile.read()
'Hello World!\nThe total value = $1820.00\n'
>>> for line in mydata:
...   myfile.write(line + '\n')
... 
>>> myfile.seek(0)
>>> myfile.read()
'Hello World!\nThe total value = $1820.00\nHello World!\nThe total value = $1820.00\n'
>>> myfile.close()

要把數(shù)據(jù)寫入文件,必須先創(chuàng)建 file 對象。但是,在這情況下,必須用 'w' 模式標(biāo)記指定要寫入文件。在這個(gè)示例中,把 mydata list 的內(nèi)容寫入文件,關(guān)閉文件,然后重新打開文件,這樣就可以讀取內(nèi)容了。

但是,通常情況下,想要同時(shí)讀取文件和寫入文件,所以這個(gè)示例的下一部分用 'r+' 模式重新打開文件。因?yàn)槟軌驅(qū)懭胛募皇翘砑?,所以文件?huì)被截?cái)?。首先,?mydata list 的內(nèi)容寫入文件,然后把文件指針重新定位到文件開頭,并讀入內(nèi)容。然后這個(gè)示例關(guān)閉文件,并用讀取和添加模式 "r+a" 重新打開文件。正如示例代碼所示,文件內(nèi)容現(xiàn)在是兩個(gè)寫入操作的結(jié)果(文本是重復(fù)的)。
處理二進(jìn)制數(shù)據(jù)

前面所有的示例都處理文本數(shù)據(jù)或字符數(shù)據(jù):寫入和讀取字符 string。但是,在某些情況下,例如在處理整數(shù)或壓縮文件時(shí),需要能夠讀取和寫入二進(jìn)制數(shù)據(jù)。在創(chuàng)建 file 對象時(shí),通過把 'b' 添加到文件模式中,可以很容易地用 Python 處理二進(jìn)制數(shù)據(jù),如清單 7 所示。
清單 7. 處理二進(jìn)制數(shù)據(jù)

>>> myfile = open("testit.txt", "wb")
>>> for c in range(50, 70):
...   myfile.write(chr(c))
... 
>>> myfile.close()
>>> myfile = open("testit.txt")
>>> myfile.read()
'23456789:;<=>?@ABCDE'
>>> myfile.close()

在這個(gè)示例中,創(chuàng)建一個(gè)合適的 file 對象,然后用從 50 到 69 的 ASCII 值寫入二進(jìn)制字符。使用 chr 方法,把 range 方法調(diào)用創(chuàng)建的整數(shù)轉(zhuǎn)變成字符。在寫完所有數(shù)據(jù)之后,關(guān)閉文件并重新打開文件進(jìn)行讀取,還是使用二進(jìn)制模式標(biāo)記。讀取文件可以證明沒有把整數(shù)寫入文件,相反,寫的是字符值。

在讀取和寫入二進(jìn)制數(shù)據(jù)時(shí),必須小心,因?yàn)椴煌钠脚_(tái)用不同的方式保存二進(jìn)制數(shù)據(jù)。如果必須處理二進(jìn)制數(shù)據(jù),最好是使用來自 Python 庫的合適對象(或者來自第三方開發(fā)人員的對象)。

讀取和寫入:最有趣的地方

這篇文章討論了在 Python 程序中如何從文件讀取數(shù)據(jù)和寫入數(shù)據(jù)到文件中。總體來說,過程很簡單:創(chuàng)建合適的 file 對象,然后按照需要讀取和寫入。但是,在使用寫入模式創(chuàng)建 file 文件,向文件寫入數(shù)據(jù)時(shí),必須注意文件的截?cái)唷H绻枰蛭募刑砑訑?shù)據(jù),應(yīng)當(dāng)在創(chuàng)建 file 對象時(shí),使用添加模式。

相關(guān)文章

  • python實(shí)現(xiàn)列表中最大最小值輸出的示例

    python實(shí)現(xiàn)列表中最大最小值輸出的示例

    今天小編就為大家分享一篇python實(shí)現(xiàn)列表中最大最小值輸出的示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python JWT 介紹和使用詳解

    Python JWT 介紹和使用詳解

    這篇文章主要介紹了Python JWT 介紹和使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 解決keras,val_categorical_accuracy:,0.0000e+00問題

    解決keras,val_categorical_accuracy:,0.0000e+00問題

    這篇文章主要介紹了解決keras,val_categorical_accuracy:,0.0000e+00問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • python下MySQLdb用法實(shí)例分析

    python下MySQLdb用法實(shí)例分析

    這篇文章主要介紹了python下MySQLdb用法,實(shí)例分析了Python中MySQLdb的安裝及使用技巧,包括增刪改查及亂碼處理的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 在?Python?中如何為對象添加屬性

    在?Python?中如何為對象添加屬性

    在本文中我們將介紹如何在Python中為對象添加屬性,我們還將通過示例介紹如何在Python中更改對象的屬性,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-06-06
  • 探索Python?Furl高性能URL構(gòu)建解析和操作功能實(shí)例

    探索Python?Furl高性能URL構(gòu)建解析和操作功能實(shí)例

    本文將提供關(guān)于Python?Furl的全面指南,包括安裝和配置、基本概念、URL解析、URL構(gòu)建、查詢參數(shù)操作、片段處理、實(shí)際應(yīng)用場景以及豐富的示例代碼
    2024-01-01
  • Python使用ntplib庫同步校準(zhǔn)當(dāng)?shù)貢r(shí)間的方法

    Python使用ntplib庫同步校準(zhǔn)當(dāng)?shù)貢r(shí)間的方法

    NTP網(wǎng)絡(luò)時(shí)間協(xié)議其實(shí)大家平時(shí)或多或少都能接觸到,包括Windows在內(nèi)的操作系統(tǒng)中的很多Internet時(shí)間同步功能都是在NTP的基礎(chǔ)上來做,這里我們來看一下Python使用ntplib庫同步校準(zhǔn)當(dāng)?shù)貢r(shí)間的方法
    2016-07-07
  • python markdown轉(zhuǎn)html自定義實(shí)現(xiàn)工具解析

    python markdown轉(zhuǎn)html自定義實(shí)現(xiàn)工具解析

    Python-Markdown2 是一個(gè) Python 庫,用于將 Markdown 文本轉(zhuǎn)換為 HTML,它是對標(biāo)準(zhǔn) Markdown 語法的擴(kuò)展,提供了一些額外的功能和選項(xiàng),同時(shí)還兼容標(biāo)準(zhǔn) Markdown,用它可以方便地生成漂亮的文檔、博客文章、項(xiàng)目文檔等
    2024-01-01
  • Python 實(shí)現(xiàn)數(shù)組相減示例

    Python 實(shí)現(xiàn)數(shù)組相減示例

    今天小編就為大家分享一篇Python 實(shí)現(xiàn)數(shù)組相減示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • PyTorch 隨機(jī)數(shù)生成占用 CPU 過高的解決方法

    PyTorch 隨機(jī)數(shù)生成占用 CPU 過高的解決方法

    今天小編就為大家分享一篇PyTorch 隨機(jī)數(shù)生成占用 CPU 過高的解決方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01

最新評(píng)論