numpy提供了强大的科学计算的功能,而在使用中,数据往往是存储在文件中的,那么如何进行文件的提取和写入了,numpy同样提供了用于提取和写入文件的方法
首先是常规的open with和函数np.loadtxt()
对于txt文件,可以使用np.loadtxt()函数读取(csv文件一样用它,因为csv数据也是纯文本数据,但csv以逗号分隔,读起来简单,txt文件可能要自己去找分隔符)
例子如下:
#该文件存放内容如下:
# Study python I can learn a lot
# Study python I can programming
# Study python I can be happier
with open("C:\\Users\\30378\\Desktop\\py_work\\learn_python.txt","r",encoding="utf-8") as f:
c=f.readlines()
print(c)
data=np.loadtxt("C:\\Users\\30378\\Desktop\\py_work\\learn_python.txt",delimiter=",",dtype=str)
print(data,data.dtype)
data=data.astype('<U50')
data[0]+=" but I don't want to learn"
print(data)
np.savetxt("C:\\Users\\30378\\Desktop\\py_work\\learn_python.txt",data,delimiter=',',fmt='%s')
输出为:
['Study python I can learn a lot\n', 'Study python I can programming\n', 'Study python I can be happier\n']
['Study python I can learn a lot' 'Study python I can programming'
'Study python I can be happier'] <U30
["Study python I can learn a lot but I don't want to"
'Study python I can programming' 'Study python I can be happier']
[Finished in 290ms]
大概解释一下,首先打开文件后读取每一行,存放到列表里面,列表的每个元素就是文件的一行(注意这里包括了换行符),下面使用的是loadtxt函数,以’,‘为分割符,但文件里每行都是一句话,不是以‘,’为分隔符的,所以找不到‘,‘就将整行视为一个单元,所以就还是相当于以行读取,但与上面open with不同的是,这里没有了\n换行符,这是因为使用NumPy的loadtxt()
函数加载文本文件时,它会自动处理末尾的换行符,并将其从数组中的字符串元素中去除,方便数据处理和避免潜在的问题,后面有个<u30,意思是数据类型为Unicode字符串,30是这些字符串中最长的长度,然后在第一句加上一段,就重新写入文件啦,写入文件的常用函数为np.savetxt
另外有一种numpy独有的模式,那就是用二进制保存,示例如下
np.save("C:\\Users\\30378\\Desktop\\py_work\\learn_python.npy",data)
print(os.listdir("C:\\Users\\30378\\Desktop\\py_work"))
npy_data=np.load("C:\\Users\\30378\\Desktop\\py_work\\learn_python.npy")
print(npy_data)
注意这里使用save函数保存的就是二进制文件了,后缀为.npy,结果
['Country_city_Test.py', 'delete.py', 'figure.py', 'hello.py', 'impot.py', 'learn_python.npy', 'learn_python.txt', 'make_cars.py', 'name.txt', 'randomwalk.py', '__pycache__']
["Study python I can learn a lot but I don't want to"
'Study python I can programming' 'Study python I can be happier']
[Finished in 317ms]
注意这里还打印了目录下的文件列表,发现确实多了一个'learn_pytho.npy',二进制文件不能直接用鼠标点开,要使用特定功能加载