欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python几种文件操作,默认,os,pandas,numpy

程序员文章站 2024-01-20 13:45:04
...

python自带的文件读写 :

  1. 形式:f=open("dir","r")+操作+f.close()
  2. r只读;r+读写;rb以二进制只读,适用图片等
  3. 简化的方式: with open ('dir','r') as f+操作,这种方式相当于tyr catch+close
  4. 操作方法
  • f.read(size)   读多少字节;
  • f.readline();
  • f.next() 返回文件下一行;
  • f.write(str);

os模块操作 文件和目录 :

  1. os.chdir(path)改变当前工作目录
  2. os.remove(path)删除路径为path的文件

  3. os.rename(src, dst)重命名文件或目录,从 src 到 dst

  4. os.renames(old, new)递归地对目录进行更名,也可以对文件进行更名。

  5. os.mkdir(path[, mode])以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)

  6. os.rmdir(path)删除path指定的空目录

  7. os.removedirs(path)递归删除目录

pandas模块读取 文件:

  1. read_csv(),读取带有分隔符的数据,默认分隔符是逗号,返回一个数据框。不只csv,txt也可读,但必须要指定sep。
  2. read_excel(),默认分隔符是逗号 
  3. read_table(),常用来读取txt,默认分隔符为制表符("\t")
  4. 读取spss,数据库等也有函数
  5. 写:to_csv()等
  6. 123的参数:
    data.txt
    
    1,2,3,4,python5,6,7,8,java9,10,11,12,c++
  • header:标题,默认第一行为标题。若不想要标题,header=None。
  • names列索引,例:data2 = pd.read_csv("data.txt",names=["a","b","c","d","name"])
       a   b   c   d    name
    0  1   2   3   4  python
    1  5   6   7   8    java
    2  9  10  11  12     c++

会发现多了标题和默认的行索引
  • index_col:使用哪一列作为行索引默认会使用从0开始的整数索引。例data3=pd.read_csv("data2.txt",index_col="name")
            a   b   c   d
    name
    python  1   2   3   4
    java    5   6   7   8
    c++     9  10  11  12
  • sheet_name: excel文件中的表名
  • skiprows:跳行读取文件,例:skiprows=[0,3,5]或skiprows=1
  • nrows: 读取多少行数据
  • encoding: 默认是utf-8,还可以是gbk
  • usecols: 读取表格中哪几列,必须是位置索引。例:usecols = [0,1,2,4,5]
  • na_values:设置需要将值替换成NaN的值。例:na_values=["java","c++"]   
           name    a     b    c    d
        0   NaN  1.0   NaN  3.0  4.0
        1  java  5.0   6.0  NaN  NaN
        2   NaN  NaN  10.0  NaN  NaN
    

    如果想将某个值替换成为NaN,但是可能有多个列都包含了这个值,而我们却不想替换所有的列,我们可以通过一个字典的形式来设置na_values参数,字典的键就是列索引,值就是你要替换的值。例:只将第一列的python和c++替换为NaN

        dic = {"name":["python","c++"]}
        data = pd.read_csv("data.txt",na_values=dic)
        print(data)
     
           name    a     b       c    d
        0   NaN  1.0   1.0       3    4
        1  java  5.0   6.0  python    5
        2   NaN  2.0  10.0       2  c++
    
    

     

  • sep:分隔符,例:sep="\s+",表示用任意大小空格作为分隔符

ps:常用正则表达式和限定匹配次数/边界

python几种文件操作,默认,os,pandas,numpy

python几种文件操作,默认,os,pandas,numpy

   7.写的参数

excel,csv,txt写入文件的方式基本类似,以pandas的to_xx()方式写入;三者类似,用excel格式来示例。

(1)index: 是否保留行索引

(2)columns: 通过列索引指定所需列

(3)sheet_name: 表名

(4)encoding:编码格式,utf-8或者gbk

(5)na_rep: 缺失值填充

(6)inf_rep:无穷值填充

(7)index_label: 行索引标签

(8)header: 默认为True,False没有列索引,如需更改列名,则header = ["列1","列2","列3"]

(9)to_csv时还需设置sep参数

df = pd.read_excel(r"D:\data.xlsx",sheet_nam = 0,nrows = 5)
df.to_excel(r"C:\test.xlsx",index = False,columns = ["用户id","性别","消费金额","贷款与否"],
           encoding = "utf-8",sheet_name = "示例",na_rep = "Na",inf_rep = "Na")

  8.批量读取

import os
import pandas as pd
frame = []
path = r"C:\example"
for file in os.listdir(path):
    filepath = path + "\\" + file
    print(filepath)
    frame.append(pd.read_csv(filepath,usecols = [0,1,2,3]))

df = pd.concat(frame,ignore_index = True)
print(df.head(10))

C:\example\order-14.3.csv
C:\example\order.csv
       商品ID       类别ID  门店编号     单价
0  30006206  915000003  CDNL  25.23
1  30163281  914010000  CDNL   2.00
2  30200518  922000000  CDNL  19.62
3  29989105  922000000  CDNL   2.80
4  30179558  915000100  CDNL  47.41
5  30022232  960000000  CDNL   0.30
6  30179520  915000100  CDNL  77.52
7  30184351  915000106  CDNL  15.57
8  30184351  915000106  CDNL  15.58
9  29989059  922000003  CDNL   1.98

ps:数据框连接:

pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True)
objs 需要连接的对象,eg [df1, df2]
axis axis = 0, 表示在水平方向(row)进行连接 axis = 1, 表示在垂直方向(column)进行连接
join outer, 表示index全部需要; inner,表示只取index重合的部分
join_axes 传入需要保留的index
ignore_index 忽略需要连接的frame本身的index。当原本的index没有特别意义的时候可以使用
keys 可以给每个需要连接的df一个label

参考:正则表达式https://www.jiqizhixin.com/articles/2018-04-16-2https://cloud.tencent.com/developer/article/1149679

          pandas方法:https://blog.csdn.net/sinat_29957455/article/details/79054126https://zhuanlan.zhihu.com/p/60248460

numpy模块文件存取为数组

  1. 读取np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=False)
    • frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件
    • dtype : 数据类型,可选
    • delimiter : 分割字符串,默认是任何空格
    • unpack : 如果True,读入属性将分别写入不同变量
  2. 保存np.savetxt(frame, array, fmt='%.18e', delimiter=None)
    • frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件
    • array : 存入文件的数组
    • fmt : 写入文件的格式,例如:%d %.2f %.18e
    • delimiter : 分割字符串,默认是任何空格

参考:https://zhuanlan.zhihu.com/p/26888577