当前位置: 首页 > news >正文

(Python第六天)文件处理

一、文件操作

通常我们把文件分为两类,文本文件和二进制文件。

1)文件打开

使用open()函数打开文件,需要两个参数,第一个参数是文件路径或者文件名,第二个是文件的打开模式

'r' 以只读模式打开,只读取文件不可编辑删除文件的任何内容

'w' 以写入模式打开,文件存在将会删除里面的所有内容,然后打开这个文件进行写入

'a' 以追加模式打开,写入到文件中的任何数据将自动添加到末尾

默认模式为只读模式

打开一个文件,实例:在windows下打开一个文件,必须使用绝对路径,如:

>>>fobj = open ("G:\PythonStudy\sample.txt")
>>> fobj  

2)文件关闭

只要打开一个文件,就必须关闭一个文件,则使用方法close()完成这个操作

>>>fobj.close()  

始终确保你显式关闭每个打开的文件,一旦工作完成没有任何理由保持打开文件,因为程序能打开的文件数量是有上限的,如果超过这个限制,没有任何可靠的方法回复,所以程序可能会崩溃。

3)文件读取

使用read()一次性读取整个文件

read(size)有一个可选的参数size,用于指定字符串长度,如果没有指定size或者指定为负数,都会读取并返回整个文件,如果文件大小为当前机器内存的两倍时,就会产生问题

readlines()方法可以读取所有行到一个列表中,而readline()每次读取文件的一行,实例:循环遍历文件对象来读取文件中的每一行

>>>fobj = open('sample.txt')
>>> for x in fobj:
             print(x,end = ' ')

实验:接受用户输入的字符串作为将要读取的文件的文件名,并在屏幕上打印文件内容

1 name = input("Enter the file name:")
2 fobj = open (name)
3 print(fobj.read())
4 fobj.close()

4)文件写入

通过write()打开一个文件然后我们随便写入一些文本

二、文件操作实例程序

1)拷贝文件

拷贝给定的文本文件到另一个给定的文本文件

ps:模块sys.模块sys.argv包含所有命令行参数,获取程序外部向程序传递的参数,传递给Python脚本的命令行参数列表,argv[0]是脚本名称,如果使用-c解释器的命令行选项执行命令,argv[0]则将其设置为字符串‘-c’,如果没有脚本名称传递给Pyhton解释器,argv[0]为空字符串。

sys.exit({arg})程序中间的退出,当arg=0为正常退出,其他数值(1-127)为不正常,可抛异常事件供捕获。

关于sys详细参数功能,参考:https://blog.csdn.net/qq_38526635/article/details/81739321

这个程序的功能完全可以使用shell的cp命令替代,在cp后首先输入被拷贝的文件的文件名,然后输入新文件名

提供sys模块功能,先判断命令行是否有两个文件,argv[0]代表着这个命令本身的名字,argv[1]是准备复制的文本文件的名字,argv[2]是复制过新的文本文件的名字,如果少于,则不正常退出命令行,反之,进行打开第一个文件,读出里面的内容给s,然后以w的方式打开一个新的文本文件,把s的内容输入到新的文本文件中去。

2)文本文件相关信息统计

对任意给定文本文件中的制表符、行、空格进行计数

ps:

1) enumerate(iterableobject),在序列中循环时,索引位置和对应值可以使用它同时得到,组合为一个索引序列,同时列出数据和下标,语法是enumerate(sequence,[start=0])

>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))       # 下标从 1 开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

2) count()方法,查看某对象中所包含相同元素的数量,使用Python列表内置的count()方法可以统计某个元素在列表中出现的次数。

比如,在列表列表['a','iplaypython.com','c','b‘,'a'],想统计字符串'a'在列表中出现的次数,可以

>>> ['a','iplaypython.com','c','b','a'].count('a')
2  

其返回值就是要统计参数出现的次数,在应用的时候就是把列表赋给一个变量,之后再用count()方法操作,

3)OS模块就是对操作系统进行操作,使用该模块必须先导入模块

getcwd()就是获得当前工作目录,默认为当前文件所在的文件夹

chdir()改变当前工作目录

还有一些在os.path子模块中的内容:

exists()检测某个路径是否真实存在,如:

filepath = '/home/...'
result = os.path.exists(filepath)
print(result) 

给任意的给定文本文件进行计数,代码为:

 1 import os
 2 import sys
 3 
 4 
 5 def parse_file(path):
 6     """
 7     分析给定文本文件,返回其空格、制表符、行的相关信息
 8 
 9     :arg path: 要分析的文本文件的路径
10 
11     :return: 包含空格数、制表符数、行数的元组
12     """
13     fd = open(path)
14     i = 0
15     spaces = 0
16     tabs = 0
17     for i,line in enumerate(fd):
18         spaces += line.count(' ')
19         tabs += line.count('\t')
20     # 现在关闭打开的文件
21     fd.close()
22 
23     # 以元组形式返回结果
24     return spaces, tabs, i + 1
25 
26 def main(path):
27     """
28     函数用于打印文件分析结果
29 
30     :arg path: 要分析的文本文件的路径
31     :return: 若文件存在则为 True,否则 False
32     """
33     if os.path.exists(path):
34         spaces, tabs, lines = parse_file(path)
35         print("Spaces {}. tabs {}. lines {}".format(spaces, tabs, lines))
36         return True
37     else:
38         return False
39 
40 
41 if __name__ == '__main__':
42     if len(sys.argv) > 1:
43         main(sys.argv[1])
44     else:
45         sys.exit(-1)
46     sys.exit(0)

即:先判断是否是直接运行,还是导入,再判断运行的命令是否正确,用过main自定义函数来处理命令中的文本文件,否则返回错误退出。main()函数就是判断这个路径是否存在,存在则通过parse_file函数处理,打印出空格,制表符和行数。parse_file函数就是打开这个文本文件,通过enumrate方法统计出这个文本文件的这几个符号的次数、

三、使用with语句

通过with语句处理文件对象,它会在文件用完后自动关闭,就算发生异常也没有关系。

 

四、实现lscpu

在Linux下使用lscpu命令来查看cpu当前信息,实际上是通过lscpu命令读取/proc/cpuinfo这个文件的信息并美化输出,

 

试验:在Windows下读取一个文件‘c:\\test.txt’,统计出该文件中出现的字符'a'的次数

 1 import os
 2 
 3 b=0
 4 
 5 def get_number_of_char(filePath, c):
 6     global b
 7     if os.path.exists(filePath):
 8         with open(filePath) as fp:
 9             for line in fp:
10                 n = line.count(c)     #就是一行一行的统计出每一行的字符a的次数赋值给b,让b成为全局变量,在main方法中打印出b
11                 b+=n
12     else:
13         print('the path:[{}] is not exist!'.format(filePath))
14 
15 def main():
16     file_path = 'G:\\PythonStudy\\sample.txt'
17     get_number_of_char(file_path, 'a')
18     print(b)
19     
20 if __name__ == '__main__':
21     main()

 

 

 

 

 

  

 

转载于:https://www.cnblogs.com/ywangji/p/10293669.html

相关文章:

  • 线程池异常处理之重启线程处理任务
  • ==和equals
  • Windows + Ubuntu 16.04 双系统安装
  • 蚂蚁课堂:压测工具
  • 简单的登录注册逻辑。
  • nginx 301跳转https后post请求失效问题解决
  • 解析范式(1NF-4NF)
  • P4345 [SHOI2015]超能粒子炮·改 Lucas
  • boost库:字符串处理
  • OpenSSL生成私钥和公钥
  • centos7.5配置双网卡上网
  • 工作总结报告
  • 孤荷凌寒自学python第七十八天开始写Python的第一个爬虫8
  • java 多线程
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • 10个确保微服务与容器安全的最佳实践
  • github从入门到放弃(1)
  • java中的hashCode
  • js数组之filter
  • Rancher如何对接Ceph-RBD块存储
  • rc-form之最单纯情况
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Redis 中的布隆过滤器
  • 百度地图API标注+时间轴组件
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 订阅Forge Viewer所有的事件
  • 技术:超级实用的电脑小技巧
  • 面试遇到的一些题
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 十年未变!安全,谁之责?(下)
  • 数组的操作
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 微信小程序--------语音识别(前端自己也能玩)
  • 我是如何设计 Upload 上传组件的
  • 译有关态射的一切
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (day6) 319. 灯泡开关
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (利用IDEA+Maven)定制属于自己的jar包
  • (十三)Maven插件解析运行机制
  • (新)网络工程师考点串讲与真题详解
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .net mvc 获取url中controller和action
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .netcore 获取appsettings
  • .pub是什么文件_Rust 模块和文件 - 「译」