pandas關於讀寫文件(大部分都是鏈接別人的文章)

一、關於pandas.read_csv()參數的理解

參考一
參考二

在read_csv()的過程中可以設置行索引。

二、關於pandas.to_csv()參數的理解

參考
【相關程序】:
在這裏插入圖片描述在這裏插入圖片描述

三、合併兩個.csv文件

參考一
參考二

四、創建.csv文件
一、逐行寫入:

注意writerow和writerows的區別

import csv
col=["a","b","c","d"]
row=["一","二","三","四"]
max_file = 'tmp.csv'  # 將尖峯電壓的最大值保存爲csv文件
#python2可以用file替代open
with open(max_file,'w', encoding='utf-8-sig') as f: 
    writer = csv.writer(f)
    #先寫入columns_name
    writer.writerow(col)
    #寫入多行用writerows
    writer.writerows([[row_item] for row_item in row])

【解釋】
如果不使用utf-8-sig會出現中文亂碼的情況,只用utf-8不行
【效果】
在這裏插入圖片描述
在jupyter notebook裏面的效果展示
在jupyter 裏面的展示效果

【如果希望在.csv文件裏面沒有中間的空行】
with open(max_file,'w', encoding='utf-8-sig') as f: 更改成with open(max_file,'w',newline="", encoding='utf-8-sig') as f:
在這裏插入圖片描述

二、利用pandas包
import pandas as pd
 
col1=["a","b","c","d"]
col2=["一","二","三","四"]
file = 'tmp.csv'  # 將尖峯電壓的最大值保存爲csv文件
 
#字典中的key值即爲csv中列名
dataframe = pd.DataFrame({'a_name':col1,'b_name':col2})
 
#將DataFrame存儲爲csv,index表示是否顯示行名,default=True
dataframe.to_csv(file,encoding="utf-8-sig",index=False,sep=',')

【效果】
在這裏插入圖片描述
【注意不保留行索引】
如果沒有加上index=“False”,會發現前面多了一行,創造了一行行索引

五、連接列表元素
a=["i","love","you!"]
" ".join(a)

【輸出】:
在這裏插入圖片描述

六、python獲取當前路徑的問題
import os,sys
if __name__=="__main__":
    print ("os.path.realpath(__file__)=%s" % os.path.realpath('__file__'))
    print ("os.path.dirname(os.path.realpath(__file__))=%s" % os.path.dirname(os.path.realpath('__file__')))
    # 獲取當前文件的目錄
    print ("os.path.split(os.path.realpath(__file__))=%s" % os.path.split(os.path.realpath('__file__'))[0])
    # 得到一個列表,分別是目錄以及文件名
    print("os.path.split(os.path.realpath('__file__')):",os.path.split(os.path.realpath('__file__')))
    print("os.path.realpath('__file__')=%s"%os.path.realpath("__file"))
    # 獲取file的完整路徑
    print ("os.path.abspath(__file__)=%s" % os.path.abspath('__file__'))
    print ("os.getcwd()=%s" % os.getcwd())
    print ("sys.path[0]=%s" % sys.path[0])
    print ("sys.argv[0]=%s" % sys.argv[0])

【輸出】:
在這裏插入圖片描述

七、使用glob.glob()

參考文檔

八、獲取當前文件夾下的文件信息

參考文檔

九、python文件中幾種讀寫方式(w,r,)的區別

1、r表示只讀,r+讀寫,都不創建;
2、w新建只寫,w+新建讀寫,兩者都會將內容清零。以w方式打開不能讀出
3、w+與r+區別:
r+:可讀可寫,若文件不存在,報錯;w+: 可讀可寫,若文件不存在,創建
4、r+與a+區別:

fd = open("1.txt",'w+')
fd.write('123')
fd = open("1.txt",'r+')
fd.write('456')
fd = open("1.txt",'a+')
fd.write("789")
fd.close()

結果:456789
這個文件必須得注意關閉,關閉之後再打開纔會出現456789,否則只有456
說明r+進行了覆蓋寫。

5、以a,a+的方式打開文件,附加方式打開
a:附加寫方式打開,不可讀;
a+: 附加讀寫方式打開
w和a是不可以讀的方式。
若不存在會創建新文件的打開方式:a,a+,w,w+

6、

fd=open(r'2.txt','a+')
fd.write('123')
fd.read()
輸出:“”空的結果

7、

fd=open(r'2.txt','a+')
fd.seek(0)
fd.read()
輸出:“123”

8、

fd=open(r'2.txt','w+') #清空內容,重新寫入
fd.write('456')
fd.flush()#確定寫入,此時文件內容爲“456”
fd.read()
#因爲指針仍然在|最後
#也就是123EOF
輸出:“”結果是空的

9、
解決方案一、調用close後重新打開,指針位於開頭。(r,r+,a+,U都可以,注意不要用w,w+,a打開)

fd.close()
fd=open(r'f:\mypython\test.py','a+')
fd.read()
# '456'

fd.close()
fd=open(r'f:\mypython\test.py','r+')
fd.read()
# '456'

fd=open(r'f:\mypython\test.py','r')
fd.read()
# '456'

fd.close()
fd=open(r'f:\mypython\test.py','U')
fd.read()
# '456'

10、解決方案二、調用seek指向開頭

fd=open(r'f:\mypython\test.py','w+')
fd.write('456')
fd.seek(0)
fd.read()
# '456'

11、seek函數
seek(offset[, whence]) ,offset是相對於某個位置的偏移量。位置由whence決定,默認whence=0,從開頭起;whence=1,從當前位置算起;whence=2相對於文件末尾移動,通常offset取負值。

12、記得close()關閉

當我們寫文件時,操作系統往往不會立刻把數據寫入磁盤,而是放到內存緩存起來,空閒的時候再慢慢寫入。只有調用close()方法時,操作系統才保證把沒有寫入的數據全部寫入磁盤。忘記調用close()的後果是數據可能只寫了一部分到磁盤,剩下的丟失了。所以,還是用with語句來得保險:

with open('/Users/michael/test.txt', 'w') as f:
    f.write('Hello, world!')

13、關於file.flush的理解:

一般的文件流操作都包含緩衝機制,write方法並不直接將數據寫入文件,而是先寫入內存中特定的緩衝區。
flush方法是用來刷新緩衝區的,即將緩衝區中的數據立刻寫入文件,同時清空緩衝區。
正常情況下緩衝區滿時,操作系統會自動將緩衝數據寫入到文件中。
至於close方法,原理是內部先調用flush方法來刷新緩衝區,再執行關閉操作,這樣即使緩衝區數據未滿也能保證數據的完整性。
如果進程意外退出或正常退出時而未執行文件的close方法,緩衝區中的內容將會丟失。

參考

🔟、遇到的問題——SettingWithCopyWarning

https://www.jianshu.com/p/72274ccb647a

十一、python在.csv文件中寫入中文字符

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章