最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python?open函數(shù)中newline參數(shù)實例詳解

 更新時間:2022年06月22日 10:52:26   作者:我是個燒餅啊  
newLine()方法可用于輸出一個換行字符"/n",下面這篇文章主要給大家介紹了關于python?open函數(shù)中newline參數(shù)的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

問題的由來

我在讀pythoncsv模塊文檔 看到了這樣一句話

如果 csvfile 是文件對象,則打開它時應使用 newline=‘’。
其備注:如果沒有指定 newline=‘’,則嵌入引號中的換行符將無法正確解析,并且在寫入時,使用 \r\n 換行的平臺會有多余的 \r 寫入。由于 csv 模塊會執(zhí)行自己的(通用)換行符處理,因此指定 newline=‘’ 應該總是安全的。

我就在思考open函數(shù)中的newline參數(shù)的作用,因為自己之前在使用open函數(shù)時從來沒有設置過newline參數(shù),僅從上面官方給的備注理解newline參數(shù)可以幫助處理換行符解析的問題

并且查閱得知不同操作系統(tǒng)換行符并不一致:

Unix 的行結束約定 ‘\n’、Windows 的約定 ‘\r\n’ 以及舊版 Macintosh 的約定 ‘\r’

打破了我原本觀念以為的換行符就是\n

python官方文檔對newline參數(shù)解釋:

newline 控制 universal newlines 模式如何生效(它僅適用于文本模式)。它可以是 None,‘’,‘\n’,‘\r’ 和 ‘\r\n’。它的工作原理:
從流中讀取輸入時,如果 newline 為 None,則啟用通用換行模式。輸入中的行可以以 ‘\n’,‘\r’ 或 ‘\r\n’ 結尾,這些行被翻譯成 ‘\n’ 在返回呼叫者之前。如果它是 ‘’,則啟用通用換行模式,但行結尾將返回給調用者未翻譯。如果它具有任何其他合法值,則輸入行僅由給定字符串終止,并且行結尾將返回給未調用的調用者。
將輸出寫入流時,如果 newline 為 None,則寫入的任何 ‘\n’ 字符都將轉換為系統(tǒng)默認行分隔符 os.linesep。如果 newline 是 ‘’ 或 ‘\n’,則不進行翻譯。如果 newline 是任何其他合法值,則寫入的任何 ‘\n’ 字符將被轉換為給定的字符串。

從這也就理解了為什么原本使用open()寫的時候用\n就可以表示換行以及讀文本文件時行尾會返回\n

  • 寫入的時候沒有指定newline參數(shù)會將\n翻譯成系統(tǒng)默認的行分割符(\r\n)
  • 讀的時候沒有指定newline參數(shù)會將行分割符(\r\n)翻譯為\n

回到上文,那為什么在讀寫csv文件時就要設置newline=''呢?

pythoncsv官方文檔解釋了這一問題(這也就引入了第二種方法解決換行的問題,我在后面會介紹到)

Dialect.lineterminator
放在 writer 產生的行的結尾,默認為 ‘\r\n’。
注解 reader 經過硬編碼,會識別 ‘\r’ 或 ‘\n’ 作為行尾,并忽略 lineterminator。未來可能會更改這一行為。

用白話說就是writerow()方法在寫入一行數(shù)據時在行尾都會跟一個默認換行符(\r\n)(即csv是將’一行數(shù)據\r\n’寫入內存,此時這一行數(shù)據還在內存中,還沒有寫入文件)之后執(zhí)行代碼真正在向文件寫入時根據不同newline參數(shù)進行翻譯
而在向txt文件使用write()方法寫入內容時是我們手動添加換行符\n(內存中的數(shù)據就是我們寫入的內容,并不會隱式添加其他內容)之后執(zhí)行代碼真正在向文件寫入時根據newline參數(shù)進行翻譯,這就是二者的區(qū)別
具體流程:
newline=‘’
writer.writerow(‘line’) 實際是向內存中寫入’line\r\n’ --》 執(zhí)行代碼,寫入文件,根據newline=‘’,將不進行翻譯 --》文件最終寫入’line\r\n’
newline=None(默認)
f.write(‘line\n’) 直接將’line\n’寫入內存 --》 執(zhí)行代碼,寫入文件,根據newline=None,將\n翻譯為\r\n --》文件最終寫入’line\r\n’

具體實例

case1: w newline=‘’ r newline=‘’

import csv
with open("test.csv","w",encoding='utf-8',newline='') as csvfile:
	    writer=csv.writer(csvfile)
	    writer.writerow(["num","name","grade"])
	    writer.writerows([[1,'luke','96'],[2,'jack','85'],[3,'nick','84']])
with open("test.csv","r",encoding='utf-8',newline='') as csvfile:
	    txtdata=csvfile.read()
txtdata      #>>'num,name,grade\r\n1,luke,96\r\n2,jack,85\r\n3,nick,84\r\n'

case2: w newline=‘\r’ r newline=‘’

import csv
with open("test.csv","w",encoding='utf-8',newline='\r') as csvfile:
	    writer=csv.writer(csvfile)
	    writer.writerow(["num","name","grade"])
	    writer.writerows([[1,'luke','96'],[2,'jack','85'],[3,'nick','84']])
with open("test.csv","r",encoding='utf-8',newline='') as csvfile:
	    txtdata=csvfile.read()
txtdata  #>>'num,name,grade\r\r1,luke,96\r\r2,jack,85\r\r3,nick,84\r\r'

case3: w newline=‘\r\n’ r newline=‘’

import csv
with open("test.csv","w",encoding='utf-8',newline='\r\n') as csvfile:
	    writer=csv.writer(csvfile)
	    writer.writerow(["num","name","grade"])
	    writer.writerows([[1,'luke','96'],[2,'jack','85'],[3,'nick','84']])
with open("test.csv","r",encoding='utf-8',newline='') as csvfile:
	    txtdata=csvfile.read()
txtdata  #>>'num,name,grade\r\r\n1,luke,96\r\r\n2,jack,85\r\r\n3,nick,84\r\r\n'

case4: w newline=None r newline=None

import csv
with open("test.csv","w",encoding='utf-8',newline=None) as csvfile:
	    writer=csv.writer(csvfile)
	    writer.writerow(["num","name","grade"])
	    writer.writerows([[1,'luke','96'],[2,'jack','85'],[3,'nick','84']])
with open("test.csv","r",encoding='utf-8',newline=None) as csvfile:
	    txtdata=csvfile.read()
txtdata  #>>'num,name,grade\n\n1,luke,96\n\n2,jack,85\n\n3,nick,84\n\n'

case5: 文件寫入為\r\r\n 文件讀取 newline=‘\r’

with open("test.csv","r",encoding='utf-8',newline='') as csvfile:
	txtdata=csvfile.read()
txtdata  #>>'num,name,grade\r\r\n1,luke,96\r\r\n2,jack,85\r\r\n3,nick,84\r\r\n'
import csv
with open("test.csv","r",encoding='utf-8',newline='\r') as csvfile:
    content = csv.reader(csvfile)
    for i in content:
        print(i)

為什么會報錯:

csv.reader是如何讀取\r\r\n的:讀取時遇到\r認為一行結束了,再一次遇到\r同樣認為一行結束(因而返回了空串列表),遇到\n無法解釋–》報錯

case6:文件寫入為\r\r\n 文件讀取 newline=‘\n’

with open("test.csv","r",encoding='utf-8',newline='') as csvfile:
    txtdata=csvfile.read()
txtdata  #>>'num,name,grade\r\r\n1,luke,96\r\r\n2,jack,85\r\r\n3,nick,84\r\r\n'
import csv
with open("test.csv","r",encoding='utf-8',newline='\n') as csvfile:
    content = csv.reader(csvfile)
    for i in content:
        print(i)

case7:文件寫入為\r\r\n 文件讀取newline=‘\r\n’

with open("test.csv","r",encoding='utf-8',newline='') as csvfile:
    txtdata=csvfile.read()
txtdata  #>>'num,name,grade\r\r\n1,luke,96\r\r\n2,jack,85\r\r\n3,nick,84\r\r\n'
import csv
with open("test.csv","r",encoding='utf-8',newline='\r\n') as csvfile:
    content = csv.reader(csvfile)
    for i in content:
        print(i)

case8:文件寫入為\r\r 文件讀取 newline=‘\r’

with open("test.csv","r",encoding='utf-8',newline='') as csvfile:
    txtdata=csvfile.read()
txtdata  #>>'num,name,grade\r\r1,luke,96\r\r2,jack,85\r\r3,nick,84\r\r'
import csv
with open("test.csv","r",encoding='utf-8',newline='\r') as csvfile:
    content = csv.reader(csvfile)
    for i in content:
        print(i)

第二種方法:通過設置csv.writer方法中的lineterminator參數(shù)

上面提到lineterminator參數(shù)控制writer寫入每一行后跟的隱式結束符,默認為’\r\n’,因此我們需要要設置lineterminator=‘\n’,讀取時也不需要設置newline參數(shù)即可獲得想要的效果

import csv
with open("test.csv","w",encoding='utf-8') as csvfile:
    writer=csv.writer(csvfile,lineterminator='\n')
    writer.writerow(["num","name","grade"])
    writer.writerows([[1,'luke','96'],[2,'jack','85'],[3,'nick','84']])
with open("test.csv","r",encoding='utf-8') as csvfile:
    lst=csv.reader(csvfile)
    csvfile.seek(0)
    txtdata = csvfile.read()
    csvfile.seek(0)
    for i in lst:
        print(i)
txtdata #>>'num,name,grade\n1,luke,96\n2,jack,85\n3,nick,84\n'

總結

到此這篇關于python open函數(shù)中newline參數(shù)實例詳解的文章就介紹到這了,更多相關python open函數(shù)newline參數(shù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python中if嵌套命令實例講解

    python中if嵌套命令實例講解

    在本篇文章里小編給大家整理的是一篇關于python中if嵌套命令實例講解內容,有興趣的朋友們可以學習下。
    2021-02-02
  • python+Django+apache的配置方法詳解

    python+Django+apache的配置方法詳解

    這篇文章主要介紹了python+Django+apache的配置方法,詳細分析了python+Django+apache的安裝與配置步驟,并分析了相關注意事項,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • python保留小數(shù)函數(shù)的幾種使用總結

    python保留小數(shù)函數(shù)的幾種使用總結

    本文主要介紹了python保留小數(shù)函數(shù)的幾種使用總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Python 爬蟲圖片簡單實現(xiàn)

    Python 爬蟲圖片簡單實現(xiàn)

    這篇文章主要介紹了Python 爬蟲圖片簡單實現(xiàn)的相關資料,需要的朋友可以參考下
    2017-06-06
  • Matplotlib實戰(zhàn)之面積圖繪制詳解

    Matplotlib實戰(zhàn)之面積圖繪制詳解

    面積圖,或稱區(qū)域圖,是一種隨有序變量的變化,反映數(shù)值變化的統(tǒng)計圖表,這篇文章主要介紹了如何利用Matplotlib實現(xiàn)面積圖的繪制,需要的可以參考下
    2023-08-08
  • 使用Python和大模型進行數(shù)據分析和文本生成

    使用Python和大模型進行數(shù)據分析和文本生成

    Python語言以其簡潔和強大的特性,成為了數(shù)據科學、機器學習和人工智能開發(fā)的首選語言之一,在這篇文章中,我將介紹如何用Python連接和使用大模型,并通過示例展示如何在實際項目中應用這些技術,需要的朋友可以參考下
    2024-05-05
  • Windows系統(tǒng)下多版本pip的共存問題詳解

    Windows系統(tǒng)下多版本pip的共存問題詳解

    這篇文章主要給大家介紹了關于在Windows系統(tǒng)下多版本pip的共存問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2017-10-10
  • python通過cookie模擬已登錄狀態(tài)的初步研究

    python通過cookie模擬已登錄狀態(tài)的初步研究

    對于那些需要在登錄環(huán)境下進行的爬蟲操作,模擬登陸或偽裝已登錄狀態(tài)是一個剛性需求。這篇文章主要介紹了python通過cookie模擬已登錄狀態(tài)的相關資料,需要的朋友可以參考下
    2016-11-11
  • django免除csrf校驗的方法

    django免除csrf校驗的方法

    這篇文章主要介紹了django免除csrf校驗的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • python 讀取鼠標點擊坐標的實例

    python 讀取鼠標點擊坐標的實例

    今天小編就為大家分享一篇python 讀取鼠標點擊坐標的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12

最新評論

鄂尔多斯市| 分宜县| 竹山县| 黑河市| 南召县| 布拖县| 大关县| 双柏县| 邵阳市| 长兴县| 黑河市| 永胜县| 新民市| 东兴市| 嘉义县| 遵义市| 安岳县| 沽源县| 社旗县| 法库县| 泊头市| 临澧县| 凯里市| 红桥区| 梁平县| 内丘县| 兰溪市| 阿拉善盟| 灵石县| 九龙坡区| 南陵县| 日土县| 中山市| 榆社县| 宣恩县| 海安县| 和平县| 旬阳县| 崇礼县| 翁牛特旗| 阿克陶县|