数据分析工作离不开读写类型转换,比如需要将txt文件(理论上txt文件不限制数据行数)落到本地,然后利用Python将txt转为xlsx文件(pandas更习惯csv文件)进行统计分析,最后输出可视化报告。
本文目录:
open函数
read()
readline()
readlines()
write() : w覆盖写 ;a追加写
xlwt中的write()
xlwings中的写函数
to be continued
如果你想用python读取文件(如txt、csv等),第一步要用open函数打开文件。
open()是python的内置函数,它会返回一个文件对象,这个文件对象拥有read、readline、write、close等方法。
open
file:需要打开的文件路径
mode(可选):打开文件的模式,如只读、追加、写入等
r:表示文件只能读取
w:表示文件只能写入
a:表示打开文件,在原有内容的基础上追加内容,在末尾写入
w+:表示可以对文件进行读写双重操作
默认为r模式mode,此外mode参数还可以指定以什么编码方式读写文本,默认以文本文件打开
当你需要以字节(二进制)形式读写文件时,只需要在mode参数中追加'b'即可:
当你在默认模式下读取文本文件时(二进制文件不可以),文件中的换行符会转换为'n'形式。相反,在默认模式下写入文件时,文本中的'n'会转换为换行符。
def main():
f = open('Desktop//detail20191202.txt', 'r', encoding='utf-8')
print(f.read())
f.close()
if __name__ == '__main__':
main()
为了让代码有一定的健壮性和容错性,我们可以使用Python的异常机制对可能在运行时发生状况的代码进行适当的处理。由于finally块的代码不论程序正常还是异常都会执行到,因此我们通常把finally块称为“总是执行代码块”,它最适合用来做释放外部资源的操作。
f.close() 用来关闭文件并立即释放它使用的所有系统资源。如果你没有显式地关闭文件,Python的垃圾回收器最终将销毁该对象并为你关闭打开的文件,
但这个文件可能会保持打开状态一段时间。应该要养成使用close()的习惯。
def main():
f=None
try:
f = open('Desktop//detail20191202.txt', 'r', encoding='utf-8')
print(f.read())
except FileNotFoundError:
print('无法打开指定的文件!')
except LookupError:
print('指定了未知的编码!')
except UnicodeDecodeError:
print('读取文件时解码错误!')
finally:
if f:
f.close()
if __name__=='__main__':
main()
如果不愿意在finally代码块中关闭文件对象释放资源,也可以使用上下文语法,通过with关键字指定文件对象的上下文环境并在离开上下文环境时自动释放文件资源。
def main():
try:
with open('Desktop//detail20191202.txt', 'r', encoding='utf-8') as f:
print(f.read())
except FileNotFoundError:
print('无法打开指定的文件!')
except LookupError:
print('指定了未知的编码!')
except UnicodeDecodeError:
print('读取文件时解码错误!')
if __name__ == '__main__':
main()
read()会读取一些数据并将其作为字符串(在文本模式下)或字节对象(在二进制模式下)返回。read([size])方法从文件当前位置起读取size个字节,若无参数size,则表示读取至文件结束为止,它范围为字符串对象。
def main():
try:
with open('Desktop//detail20191202.txt', 'r', encoding='utf-8') as f:
print(f.read())
print(type(f.read()))
except FileNotFoundError:
print('无法打开指定的文件!')
except LookupError:
print('指定了未知的编码!')
except UnicodeDecodeError:
print('读取文件时解码错误!')
if __name__ == '__main__':
main()
从字面意思可以看出,该方法每次读出一行内容,所以,读取时占用内存小,比较适合大文件,该方法返回一个字符串对象。
readline方法从文件中读取整行,包括换行符'n'。换行符(n)留在字符串的末尾,如果文件不以换行符结尾,则在文件的最后一行省略,这使得返回值明确无误。
换行符(n)留在字符串的末尾,如果文件不以换行符结尾,则在文件的最后一行省略,这使得返回值明确无误。如果 f.readline() 返回一个空的字符串,则表示已经到达了文件末尾,而空行使用 'n' 表示,该字符串只包含一个换行符。readline方法会记住上一个readline函数读取的位置,接着读取下一行。所以当你需要遍历文件每一行的时候,不妨使用readline方法吧!
def main():
try:
with open('C://Users//baihua//Desktop//detail20191202.txt', 'r', encoding='utf-8') as f:
line=f.readline()
print(type(f.readline()))
for line in f:
print(line,end='')
except FileNotFoundError:
print('无法打开指定的文件!')
except LookupError:
print('指定了未知的编码!')
except UnicodeDecodeError:
print('读取文件时解码错误!')
if __name__ == '__main__':
main()
readlines()方法读取整个文件所有行,保存在一个列表(list)变量中,每行作为一个元素,但读取大文件会比较占内存。
def main():
try:
with open('Desktop//detail20191202.txt', 'r', encoding='utf-8') as f:
lines=f.readlines()
print(type(f.readlines()))
for line in lines:
print(line)
except FileNotFoundError:
print('无法打开指定的文件!')
except LookupError:
print('指定了未知的编码!')
except UnicodeDecodeError:
print('读取文件时解码错误!')
if __name__ == '__main__':
main()
write方法顾名思义,就是将字符串写入到文件里。
with open('Desktop//detail20191202.txt','w') as f:
f.write('hello,my friends!nthis is python big data analysis')
f.close()
with open('Desktop//detail20191202.txt','a') as f:
f.write('hello,my friends!nthis is python big data analysis')
f.close()
import xlwt
# 创建一个workbook 设置编码
workbook = xlwt.Workbook(encoding = 'utf-8')
# 创建一个worksheet
worksheet = workbook.add_sheet('My Worksheet')
# 写入excel
# 参数对应 行, 列, 值
worksheet.write(1,0, label = 'this is test')
# 保存
workbook.save('Excel_test.xls')
import xlwings as xw
wb = xw.Book("e:example.xlsx") #建立excel表连接
sht = wb.sheets["sheet1"] #实例化工作表对象
sht.range('A1').value = "xlwings" #在单元格中写入数据
sht.range('A2').value = [['Foo 1', 'Foo 2', 'Foo 3'], [10.0, 20.0, 30.0]] #批量写入数据,只需指定单元格起始位置
sht.range('A2').expand().value #读取表中批量数据,使用expand()方法
sht.range('A5').options(pd.DataFrame,expand='table').value #将数据读取,输出类型为DataFrame
#支持numpy写入数据
import numpy as np
np_data = np.array((1,2,3))
sht.range('F1').value = np_data
#支持pandas写入数据
import pandas as pd
df = pd.DataFrame([[1,2], [3,4]], columns=['a', 'b'])
sht.range('A5').value = df
xlwt中的write() https://blog.csdn.net/xuezhangjun0121/article/details/91365875¶
xlwings中的写函数 http://docs.xlwings.org/en/stable/api.html