python中文件操作的例子_python文件操作案例及练习

本文介绍了Python中处理文件的多种方法,包括使用enumerate和with语句打印文件行及行号,转换文件中小写字母为大写,实现类似`tail -f`的功能以及统计文件中每个字符串出现的次数。示例代码详细展示了这些操作的实现过程。
摘要由CSDN通过智能技术生成

处理文件结合python中的数据类型或者函数,可以做很多事情.

需求: 打印出文件中的每行及行号

思路: 文件对象是个iterator(迭代器), 是可以迭代的,通过enumerate枚举函数得到每行和索引(行号),索引从1开始 ( 第一行 )

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

with open('/etc/passwd') as fp:for n, line in enumerate(fp, 1):print(n, line, end='')

输出1 root:x:0:0:root:/root:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologin3 daemon:x:2:2:daemon:/sbin:/sbin/nologin4 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin5 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin6 nobody:x:99:99:Nobody:/:/sbin/nologin7 avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin8 systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin9 systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin10 dbus:x:81:81:System message bus:/:/sbin/nologin11 polkitd:x:997:995:User for polkitd:/:/sbin/nologin12 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin13 postfix:x:89:89::/var/spool/postfix:/sbin/nologin14 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin15 ntp:x:38:38::/etc/ntp:/sbin/nologin16 saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin17 redis:x:995:994:Redis Database Server:/var/lib/redis:/sbin/nologin18 mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin19 nginx:x:994:993:Nginx web server:/var/lib/nginx:/sbin/nologin20 rabbitmq:x:1000:1000:rabbitmq-server:/opt/rabbitmq:/bin/bash21 unbound:x:993:992:Unbound DNS resolver:/etc/unbound:/sbin/nologin22 zabbix:x:992:989:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin23 tcpdump:x:72:72::/:/sbin/nologin

代码实现

需求: 将一个文件中指定的小写字母转换成大写,写入另一个文件

思路: 同时打开两个文件, 一个读另一个写, 先遍历读取每行,将每行中指定的小写字母通过replace方法替换大写,然后写入另一文件

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

with open_binary('passwd') as rp, #打开读取一个文件

with open_binary('new_passwd', 'w') as wp: #打开写入一个文件

for each_line in rp: #遍历读取文件

new_line = each_line.replace('root','Root') #字符串替换

wp.write(new_line) #写入替换的行

代码实现

需求: 模仿linux系统tail -f 功能

思路: 先读取文件最后10行 ( 通过deque双端队列 ),此时文件指针到末尾(等价于seek(0,2)), 然后while死循环通过readline方法读取每行, 有新内容产生就打印新的内容。考虑到while死循环占用资源比较大,所以添加循环间隔0.5s.

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

importsysfrom time importsleepfrom collections importdequedef tail(filename, last=10):"""模拟linux系统tail -f功能

filename: 文件名

last: 默认最后10行"""

try:

with open(filename) as fp:#打开文件得到fp对象

try:

last_line= ''.join(deque(fp, last)) #deque队列取最后10行,此时seek指针已经到末尾了

print(last_line, end='') #打印last_line

exceptException:pass

try:while 1:

line= fp.readline() #不停的readline() 读取

ifline:print(line, end='')

sleep(0.5) #停顿0.5s, 否则系统会爆

except KeyboardInterrupt: #如果crtl+c就表示退出

sys.exit()exceptException as e:

sys.exit(e)

代码实现

需求: 统计文件中每个字符串出现的次数

思路: 遍历文件,每行每个字符串出现一次就计数一次,返回一个字典

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

defword_count_dict(filename):"""统计指定文件中每个字符串出现的次数

param filename: the a file

return: dict"""word_count={}

with open(filename) as fp:for line infp:

words=line.strip()for word inwords:

word_count[word]= word_count.get(word, 0) + 1

returnword_countif __name__ == '__main__':

word_count_dict('/etc/passwd')

代码实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值