zoukankan      html  css  js  c++  java
  • 文件的操作及相关异常的处理

    文件操作及相关异常处理

    标签(空格分隔): 文件,打开


    1. 打开文件
      Python使用内置的open()函数打开一个文件,并且返回一个文件对象,也叫句柄(handle)。

      f = open("test.txt")    # 在本文件夹下面的一个文件
      f = open("C:/Python33/README.txt")  # 全路径
      
    2. 关闭文件

      • 默认方法:
      f = open("app.log", 'r')
      do_something()
      f.close()
      

      但是这个办法不安全,因为在进行其他操作时,可能会出现异常,程序退出,那么关闭文件的语句就不会被执行。

      • 为了避免异常,可以使用<try-finally>语句来处理
      try:
      	f = open('app.log', 'r')
      	do_something()
      finally:
      	f.close()
      
      • 官网给出的最佳用法
      with open('app.log', 'r') as f:
      do_something()
      
    3. 文件操作

      • 写入文件

        • 单独字符串写入(write()方法)
        lines = ['line1', 'line2']
        with open('filename.txt', 'w') as f:
        	s = ''
        	for data in lines:
        		s += data
        		s += '
        '
        	f.write(s)
        

        引入join()函数写入

        lines = ['line1', 'line2']
        with open('filename.txt', 'w') as f:
        	f.write('
        '.join(lines))
        
        • writelines()方法写入
        lines = ['line1', 'line2']
        with open('filename.txt', 'w') as f:
        	f.writelines("%s
        " % l for l in lines)
        
      • 文件读取

        • read()方法
          result = f.read()
          这里返回的是文件内容,是str类型的结果,这个方法还带一个数值类型的参数,指定读取多少内容,如果省略了或者是负数,那么就返回文件的全部内容。

        • readline()方法
          result = f.readline()
          返回的也是字符串,不过是一行内容,继续调用,就会返回下一行内容

        • readlines()方法
          result = f.readlines()
          这里返回的是一个列表,但是当数据较大时,这样的用法会很占用内存,不推荐在数据量大时使用

        • 直接循环文件对象

        for line in f:
        	print line
        	do_something()
        

        这样的用法节省内存,快速,并且代码还简单

        • 大文件的读取
        with open("log.txt") as f:
        	for line in f:
        		do_something_with(line)
        
    4. 处理数据(csv文件格式)
      步骤包括:利用csv.reader()函数创建csv模块的读取器(** 迭代器[每次迭代完元素就消失] **) --> 循环调用next()函数读取每一行的数据

    import csv
    from datetime import datetime
    from matplotlib import pyplot as plt
    
    filename = 'guangzhou-2017.csv'
    # 打开文件
    with open(filename) as f:
    	# 创建cvs文件读取器
    	reader = csv.reader(f)
    	# 读取第一行,这行是表头数据。
    	header_row = next(reader)
    	print(header_row)
    	# 定义读取起始日期
    	start_date = datetime(2017, 6, 30)
    	# 定义结束日期
    	end_date = datetime(2017, 8, 1)
    	# 定义3个list列表作为展示的数据
    	dates, highs, lows = [], [], []
    	for row in reader:
    		# 将第一列的值格式化为日期
    		d = datetime.strptime(row[0], '%Y-%m-%d')
    		# 只展示2017年7月的数据
    		if start_date < d < end_date:
    			dates.append(d)
    			highs.append(int(row[1]))
    			lows.append(int(row[2]))
    
    # 配置图形
    fig = plt.figure(dpi=128, figsize=(12, 9))
    # 绘制最高气温的折线
    plt.plot(dates, highs, c='red', label='Highest temperature', 
    	alpha=0.5, linewidth = 2.0, linestyle = '-', marker='v')
    # 再绘制一条折线
    plt.plot(dates, lows, c='blue', label='Lowest temperature',
    	alpha=0.5, linewidth = 3.0, linestyle = '-.', marker='o')
    # 为两个数据的绘图区域填充颜色
    plt.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1)
    # 设置标题
    plt.title("the temperature of Guangzhou 2017-7")
    # 为两条坐标轴设置名称
    plt.xlabel("date")
    # 该方法绘制斜着的日期标签
    fig.autofmt_xdate()
    plt.ylabel("Temperature(℃)")
    # 显示图例
    plt.legend()
    ax = plt.gca()
    # 设置右边坐标轴线的颜色(设置为none表示不显示)
    ax.spines['right'].set_color('none')
    # 设置顶部坐标轴线的颜色(设置为none表示不显示)
    ax.spines['top'].set_color('none')
    plt.show()
    
    为更美好的明天而战!!!
  • 相关阅读:
    Android 修改应用程序字体
    Activity A 跳转到Activity B 生命周期
    Android调用系统设置
    最近遇到adb connection 问题,总结一下
    今日写一篇散文 Textview settext 方法不能放入 int 参数 不然报错!
    计时线程Runnable和Handler的结合
    JMF 下载安装与测试 测试成功
    基本数据类型的介绍及转换,基本数据类型与字符串之间转换,字符串与字符数组之间转换以及字符串与字节数组之间转换
    超实用的Eclipse快捷键大全(解密为什么他们的代码写的又快又好~)
    JDK的下载、安装及Eclipse安装详细教程(内附:网盘win64版JDK安装包)
  • 原文地址:https://www.cnblogs.com/lovely-bones/p/11672898.html
Copyright © 2011-2022 走看看