python读写、导入导出数据操作(简)

这里的读写文件,与导入导出数据不同,导入数据是直接连接csv或xlsx文件,将数据导入进来或导出保存出去。

这里读文件,是可迭代的,文件使用完毕后还需要关闭。

1. 读取操作

open()
可以读取csv、txt、html文件

open(file,encoding,errors)

file:文件或文件路径
encoding:文件编码解码方式,常见有utf-8,gbk
errors:如果读取文件前两个参数都确认没问题,还是读取失败,可使用errors='ignore'

例子:

open('data.txt').read()  #相对路径

read()
每次读取整个文件,通常用于将文件内容放到一个字符串变量中,若文件较大,可调用read(size)方法,每次最多读取size个字节的内容
readlines()
也是读取整个文件,但会自动将文件内容分析成一个行的列表
readline()
不同与前面,是每次只读取一行,当没有内存可以一次读取整个文件时,可以用readline()

2. 写入操作

2.1 追加保存

open(file,'a+')

表示如果没有这个文件,就会新建一个
如果有这个文件,就不停往里面追加(a+)

注意写入完成后需要关闭文件

f=open(file,'a+')
f.write('内容')
f.close()

2.2 txt追加写入

直接写入

txtf='data.txt'
f=open(txtf,'a+',encoding='utf-8')
content1='A'
f.write(content1)
content2='B'
f.write(content2)
f.close()

在这里插入图片描述
使用for循环
尤其是爬虫时,抓取到数据后,常需要循环追加写入文件

txtf='data.txt'
f=open(txtf,'a+',encoding='utf-8')
contents=['A','B']
for content in contents:
    f.write(content)
f.close()

2.3 csv追加写入

csv数据格式里有列名,所以写入数据时,是一行行数据写入

直接写入

import csv

file='data.csv'
csvf=open(file,'a+',encoding='gbk',
         newline='')        #读取文件
writer=csv.writer(csvf)     #读取操作

line1=('name','gender','age') 
writer.writerow(line1)       #写入列名
  
line2=('张三','男','19')
writer.writerow(line2)      #写入内容

csvf.close()                 #关闭

python读写、导入导出数据操作(简)_第1张图片
使用for循环

datas=[('a','b','c'),
      ('a1','b1','c1')]

csvf=open(file,'a+',encoding='gbk',
         newline='')
writer=csv.writer(csvf)
writer.writerow(('name','gender','age'))

for data in datas:
    writer.writerow(data)
csvf.close()

python读写、导入导出数据操作(简)_第2张图片

2.2 覆盖写入

open(file,'w+')

与上面一样,只是这里的参数是w+,表示写入的形式不是追加,而是第二次写入的内容会将第一次的覆盖

比较常用的是a+,追加写入

3. 导入数据

使用pandas包中的函数

  • pd.read_csv()
  • pd.read_excel()

4. 保存数据

数据框格式的数据可直接保存

  • df.to_csv()
  • df.to_excel()

另外,os库也很有价值,导入导出文件时,查看文件路径,更改文件路径

5. os路径库

os.getcwd() 返回当前文件路径(当前脚本运行的路径)
os.listdir(path)  列出路径中的所有文件名
os.mkdir(path)  在path路径中创建一个文件夹
os.chdir(path) 更改路径

5.1. 应用-查看全部变量,并创建

是之前搞数据时有个需求,就是需要导入50张表,每个表储存为一个变量(数据框),一个个导入并命名为新变量很浪费时间,且容易出错,可以利用循环批量导入,并命名。

1 首先50张表,放在一个文件夹下

import os
os.chdir('文件夹所在路径')
file_list=os.listdir()   #展示该文件夹下的所有csv/xlsx表的表名

python读写、导入导出数据操作(简)_第3张图片
2 获取全部局部变量

Or_data=locals()    #全部的局部变量

通过将全部局部变量赋一个变量名,接下来在新建变量时,就可以利用这个Or_data这个变量名。
是字典格式:
python读写、导入导出数据操作(简)_第4张图片
可以使用**dir()**查看局部变量名
python读写、导入导出数据操作(简)_第5张图片
没有自己创建的变量
3 通过for循环批量导入数据
为防止混乱,依据csv/xlsx的表名命名变量

for f in file_list:
    data=pd.read_excel(f,header=None)  #不需要导入列名
    Or_data['Or_'+f[3:9]]=data

使用以上形式,在Or_data这个集合内,新建了一批变量。**‘Or_’+f[3:9]**是新建变量的名称,根据导入的文件f 的文件名创建。
4 检查环境里是否有这些新建的变量
可以直接敲其中一个变量名,打印内容。

或者根据自己设置的命名规则,查看变量里有多少名称是符合的。如上面的命名,是**‘Or_’+f[3:9]**,变量名会是:
Or_D_2008、Or_D_2009、…

可使用正则表达式查看导入的变量有多少是上面的命名形式(当然这里的正则还不是特别精确):

import re
Vecs=[i for i in dir() if re.search('Or_[A-Z]',i)]  #查看目前导入的变量个数
len(Vecs)

输出:50

即目前在dir()里面,有50个新创建的变量

你可能感兴趣的:(python爬虫,#,python基础)