一、關於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 裏面的展示效果
【如果希望在.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