1.打開文件
#方法1,這種方式使用後需要關閉文件
f = open("data.txt","r")
f.close()
#方法2,使用文件後自動關閉文件
with open('data.txt',"r") as f:
打開文件的模式主要有,r、w、a、r+、w+、a+
r:以讀方式打開文件,可讀取文件信息。
w:以寫方式打開文件,可向文件寫入信息。如文件存在,則清空該文件,再寫入新內容
a:以追加模式打開文件(即一打開文件,文件指針自動移到文件末尾),如果文件不存在則創建
r+:以讀寫方式打開文件,可對文件進行讀和寫操作。
w+:消除文件內容,然後以讀寫方式打開文件。
a+:以讀寫方式打開文件,並把文件指針移到文件尾。
2.讀取文件
f.read([count]) 讀出文件,如果有count,則讀出count個字節,如果不設count則讀取整個文件。
f.readline() 讀出一行信息。
f.readlines() 讀出所有行,也就是讀出整個文件的信息。
假設我們讀取的文件如下:
readline()讀取的數據爲str類型:
read()讀取數據爲str類型:
readlines()讀取數據爲list類型,而且會把換行符讀入:
3.如何把txt文件數據存入numpy數組
還是以上面文件做例子,首先通過read()將文件內容存爲str
file_path = ("D:/FDTD/test.txt")
with open(file_path,'r') as f:
file = f.read()
print(file)
print(type(file))
然後對str進行分割,然後轉化爲numpy數組:
a = file.split()
print(a)
a = np.array(a)
a = a.reshape(3,5)
print(a)
結果如下:
4.一些常用操作
f.close() |
關閉文件,記住用open()打開文件後一定要記得關閉它,否則會佔用系統的可打開文件句柄數。 |
f.fileno() |
獲得文件描述符,是一個數字 |
f.flush() |
刷新輸出緩存 |
f.isatty() |
如果文件是一個交互終端,則返回True,否則返回False。 |
f.read([count]) |
讀出文件,如果有count,則讀出count個字節。 |
f.readline() |
讀出一行信息。 |
f.readlines() | 讀出所有行,也就是讀出整個文件的信息。 |
f.seek(offset[,where]) | 把文件指針移動到相對於where的offset位置。where爲0表示文件開始處,這是默認值 ;1表示當前位置;2表示文件結尾。 |
f.tell() | 獲得文件指針位置。 |
f.truncate([size]) |
截取文件,使文件的大小爲size。 |
f.write(string) |
把string字符串寫入文件。 |
f.writelines(list) |
把list中的字符串一行一行地寫入文件,是連續寫入文件,沒有換行。 |
5.批量讀取txt文件
我們使用os模塊中的listdir來列舉所有的txt文件:
file_path = ("D:/FDTD/t")
files= os.listdir(file_path)
for file in files:
file_path2=file_path+ '/' + file
with open(file_path2,"r") as f:
假如文件中都是n行5列數據,我們需要對其進行合併:
file_path = ("D:/FDTD/t")
files= os.listdir(file_path)
time = 0
for file in files:
file_path2=file_path+ '/' + file
with open(file_path2,"r") as f:
t = f.read() #讀取文件數據,此時爲文件內容爲字符串形式
t = t.split() #按空格或換行對字符串進行分割
t = np.array(t) #將list轉化爲numpy數組
t = t.reshape(-1,5)
print('\n'+file_path2+':')
print(t) #打印一個文件的數據
if time ==0:
a = t #如果是第一個文件,則令a=t
else:
a = np.vstack((t,a)) #如果不是第一個文件,則將t與前面文件數據進行拼接
time += 1
print('\n合併後:')
print(a)
輸出結果: