python语言(三)文件修改、函数、json操作、监控日志代码、高效读取文件
f = open('a.txt','a') # "a" 如果源文件不在,会自动创建
f.write('abc')
result = f.read()
print(result)
f.close()
# r read 能读,不能写,打开不存在的文件会报错
# w write 能写,不能读
# a add 能写,不会清空以前的内容,不能读
.png)
|
模式
|
说明
|
|
r
|
read 能读,不能写,打开不存在的文件会报错
|
|
w
|
write 能写,不能读
|
|
a
|
add 能写,不会清空以前的内容,不能读
|
result = f.read()
print(result)
print('read',f.read())
print('readlines',f.readlines()) # 把文件每一行的内容都放到list里面
print('readline',f.readline()) # 只读一行
f.close()
# 文件指针
stus = ['xiaohei','xiaobai','xianglan']
f = open('b.txt','w')
f.write('sdfsdf\n') # 只能写字符串
f.writelines(stus) # 可以循环传入list、集合等
f.close()
.png)
.png)
|
模式
|
|
说明
|
|
r
|
读
|
不能写,打开不存在的文件会报错
|
|
w
|
写
|
不能读
|
|
a
|
追加
|
不删除原来内容,新增新的内容
|
| r+ |
读写模式
|
能读能写,打开不存在的文件会报错
|
|
w+
|
写读模式
|
能读能写,但是会清空以前的东西
|
|
a+
|
追加模式
|
能读能写,不会清空以前的东西
|
f = open('a.txt','r+',encoding='utf-8')
# print(f.read())
f.write('AAAAA5') # 'r+'模式能读能写
f.close()
.png)
.png)
f = open('a.txt','w+',encoding='utf-8')
print(f.read())
f.write('w+模式')
print(f.read())
f.close()
.png)
f = open('a.txt','a+',encoding='utf-8')
f.seek(0) # 移动文件指针
print(f.read())
f.write('a+模式')
f.close()
.png)
f = open('access.log',encoding='utf-8')
for line in f:
print('每一行的内容:',line) # 每次只读一行内容,直接循环
.png)
l = []
d = {'192.168.1.1':1,'192.168.1.2':5}
import time
point = 0 # 第一次打开文件,把指针放在最前面
while True:
ips = {} # 存放所有的ip地址以及它出现的次数
f = open('access.log')
f.seek(point)
for line in f:
if line.strip() != '': # 判断不为空行的时候
ip = line.split()[0]
if ip not in ips:
ips[ip]=1
else:
ips[ip] = ips[ip] + 1
point = f.tell() # 当前文件指针的位置
print(ips)
for ip in ips:
if ips.get(ip) >= 100:
print('超过100次的ip是:%s' %ip)
time.sleep(60)
.png)
f = open('a.txt','a+',encoding='utf-8')
f.seek(0)
result = f.read()
new_result = result.replace('abc','ABC')
f.seek(0)
f.truncate() # 清空文件内容
f.write(new_result)
f.close()
.png)
import os
f1 = open('a.txt',encoding='utf-8')
f2 = open('a2.txt','w',encoding='utf-8')
for line in f1:
new_line = line.replace(')
f2.write(new_line)
f1.close()
f2.close()
os.remove('a.txt') # 把原来文件删除
os.rename('a2.txt','a.txt') # 把a2.txt 替换从a.txt文件
.png)
with open('a.txt',encoding='utf-8') as f1,open('a2.txt','w',encoding='utf-8') as f2:
for line in f1:
new_line = line.replace(')
f2.write(new_line)
f1.close()
f2.close()
os.remove('a.txt')
os.rename('a2.txt','a.txt')
.png)
# 布尔
a = 1
b = 2
s = ''
l = []
d = {}
s1 = set()
t = ()
username = input('user:').strip()
if username:
print('欢迎登录%s' %username)
else:
print('用户名不能为空')
.png)
d = {"name":"abc"}
import json
import pprint
json_str = json.dumps(d) # 就是把字典/list 转成字符串(json)
json_str2 = '{"name": "abc","age":"19"}'
dic = json.loads(json_str2) # 把字符串(json)转成字典
pprint.pprint(dic)
pprint.pprint(json_str)
# json串就是字符串
.png)
d = {","age":18}
with open('users.txt','w',encoding='utf-8') as f:
json_d = json.dumps(d)
f.write(json_d)
with open('users.txt','r',encoding='utf-8') as f:
result = f.read()
json.loads(result)
d = {
"id":314,
"name":"化合物",
"sex":"女",
"age":19,
"addr":"上海市浦东新区",
"grade":"摩羯座",
",
"gold":405
}
with open('users.json','w',encoding='utf-8') as f:
# 要显示变颜色,就在文件名字后面加上“.json”
json_d = json.dumps(d,ensure_ascii=False,indent = 4)
f.write(json_d) # 要显示中文就加上“ensure_ascii=False”
# 要显示格式化 就用“indent = 4 (控制有几个缩进)”
.png)
.png)
d = {
"id":314,
"name":"化合物",
"sex":"女",
"age":19,
"addr":"上海市浦东新区",
"grade":"摩羯座",
",
"gold":405
}
with open('users.json','w',encoding='utf-8') as f:
# 要显示变颜色,就在文件名字后面加上“.json”
json_d = json.dumps(d,ensure_ascii=False,indent = 4)
f.write(json_d) # 要显示中文就加上“ensure_ascii=False”
# 要显示格式化 就用“indent = 4 (控制有几个缩进)”
d = {
"id":314,
"name":"化合物",
"sex":"女",
"age":19,
"addr":"上海市浦东新区",
"grade":"摩羯座",
",
"gold":405
}
f = open('wjq.json','w',encoding='utf-8')
json.dump(d,f,ensure_ascii=False,indent=4)
# dumps 1、传字典;2、写入
# dump 直接写入文件
f = open('wjq.json',encoding='utf-8')
dic = json.load(f)
print(dic)
# load\loads 待s的是操作字符串,不带s的是操作文件
.png)
.png)
7、函数
定义函数
1、意义:函数是实现某个功能的一些代码,提高代码的复用性。
2、定义:用def关键字定义函数,
3、函数组成:函数由函数名、形参、函数体、调用函数(里面会有函数体)组成
4、要使用函数,必须要调用它
def say_hello(msg):
print(msg)
say_hello('abc') # 调用函数
.png)
# 定义一个函数,告诉我文件名和内容
def write_file(filename,content):
f = open(filename, 'w')
f.write(content)
f.close()
write_file('wjq.json','sdfsdfsdf')
# 函数里面调用的变量都是局部变量,只在函数里面可以用,出了函数就不可以用
def read_file(file_name):
with open(file_name,encoding='utf-8') as fr:
result = fr.read() # 只能在函数里面的定义,外面用不了
return result # 用return返回的日志,外面就可以用了
content = read_file('users.txt')
print(content)
.png)
# 1、函数不写返回值的情况下返回的是什么
# 2、返回多个值的时候,返回的是什么
import datetime
def get_today_data():
a = 1
b = 2
c = 3
print('abc')
print('abc')
print('abc')
return a,b,c
result = get_today_data()
q = get_today_data()
print(q)
print(result)
.png)
# 1、必须只有一个小数点
# 2、小数点的左边必须是整数,小数点的右边必须是正整数
def is_float(s):
s = str(s)
if s.count('.') == 1:
left,right = s.split('.') #['-','1']
if left.isdigit() and right.isdigit(): # 正小数
return True
elif left.startswith('-') and left.count('-')==1 and right.isdigit():
# 先判断负号开头,只有一个负号,小数点右边是整数
lleft = left.split('-')[1] # 如果有负号的话,按照负号分割,取负号后面的数字
if lleft.isdigit():
return True
return False
print(is_float('.1'))
print(is_float(1.1))
print(is_float(-1.1))
print(is_float('000.1'))
print(is_float('-s.1'))
print(is_float('-s.s'))
print(is_float('-0.s'))
# 函数里面遇到return函数,立即结束执行
.png)
import datetime
def get_today_data():
a = 1
b = 2
c = 3
return 3
print('abc')
print('abc')
print('abc')
return a,b,c
result = get_today_data()
q = get_today_data()
print(q)
.png)
def hhh(name): # 默认值参数
print(name)
def op_file(file_name,content=None):
if content:
f = open(file_name,'w',encoding='utf-8')
f.write(content)
else:
f = open(file_name,encoding='utf-8')
return f.read()
op_file('a.txt','abc')
.png)
.png)
def abc(name,age,phone,addr,money):
print(name)
print(age)
print(phone)
print(addr)
print(money)
abc('xiaohei',18,18744039980,'shanghai',50000)
abc(age=18,addr='shanghai',money=500,phone=19322876543,name='xiaobai')
abc('xiaohei',addr='dsa3dsa',phone=18333733333,money=323,age=32)
abc(age=13,'xiaohuan') # 这种方式是不对的
.png)
file_name= 'user.json' # 全局变量
def func():
global file_name
file_name = 'abc.json' # 先从自己函数里面找,如果没有就从全局变量里面找
print(file_name)
func()
print(file_name)
.png)
def test():
global a
a = 5
def test1():
c = a + 5
return c
res = test1()
print(res) # 只调用了test1()函数,没有调用test(),所以报错
.png)
.png)
money = 500
def test(consume):
return money - consume
def test1(money):
return test(money) + money
money = test1(money)
print(money)
.png)
# 常量
PI = 3.14
money = 500
def test(consume):
return money - consume
def test1(money):
return test(money) + money
# money = test1(money)
# print(money)
python语言(三)文件修改、函数、json操作、监控日志代码、高效读取文件的更多相关文章
- linux 判断文件最后更新时间 实现监控日志是否有输出功能
linux 判断文件最后更新时间 实现监控日志是否有输出功能. 需求:监控log.txt日志文件,超过一分钟没输出内容就认为是停了,则自动启动程序. 用stat 可以看文件的更新时间stat -c % ...
- php高效遍历文件夹、高效读取文件
/** * PHP高效遍历文件夹(大量文件不会卡死) * @param string $path 目录路径 * @param integer $level 目录深度 */ function fn_sc ...
- Python 文件修改-函数介绍
上节课复习:1.字符编码 1.1 如何解决乱码问题: 字符存取使用的编码标准不一致 1.2 文件头 在文件的首行写入文件头,用于控制Python解释器读取py文件内容时使用的编码 #coding:文件 ...
- Python语言系列-04-高阶函数
闭包 #!/usr/bin/env python3 # author:Alnk(李成果) # 什么是闭包 # 1,闭包存在于函数中 # 2,闭包就是内层函数对外层函数(非全局变量)的引用 # 3,最内 ...
- Python语言程序设计之三--列表List常见操作和错误总结
最近在学习列表,在这里卡住了很久,主要是课后习题太多,而且难度也不小.像我看的这本<Python语言程序设计>--梁勇著,列表和多维列表两章课后习题就有93道之多.我的天!但是题目出的非常 ...
- Python 语言来编码和解码 JSON 对象
Json函数: json.dumps: Python标准库中的json模块,集成了将数据序列化处理的功能. 将 Python 对象编码成 JSON 字符串 语法: json.dumps(obj, sk ...
- python第三章:函数
在前面章节中,介绍了一些input(),print(),len()等内建函数,还有random,math等标准库相关函数,这些都是可以直接使用的,但是很多时候,我们也是可以编写自己的函数. 看个例子: ...
- Python(三)enumerate函数
原文链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143177932 ...
- python通过装饰器检查函数参数的数据类型的代码
把内容过程中比较常用的一些内容记录起来,下面内容段是关于python通过装饰器检查函数参数的数据类型的内容. def check_accepts(f): assert len(types) == f. ...
随机推荐
- 钉钉的sonar集成通知
代码地址: https://gitee.com/chejiangyi/dingding-sonar 钉钉(dingding)的sonar(代码质量管理工具的)集成通知,非常简单的一个小工具. 钉钉的s ...
- Linux文件目录指令
1.pwd指令 pwd 显示当前所在的目录 2.ls指令 ls [选项] [目录或文件] 查看文件信息 ls -a 查看所有文件和目录,包括隐藏的 ls -l 以列表的方式显示 3.cd指令 cd 路 ...
- FPGA控制RGMII接口PHY芯片基础
一.前言 网络通信中的PHY芯片接口种类有很多,之前接触过GMII接口的PHY芯片RTL8211EG.但GMII接口数量较多,本文使用RGMII接口的88E1512搭建网络通信系统.这类接口总线位宽小 ...
- 如何删除docker镜像中已配置的volume
场景: 有个同学不知道因为啥,将容器内部的 /sys/fs/cgroup 挂载到了外面的某个目录: 但是这个目录是很有用的,不想随便被挂载,如何从image中去掉呢? docker没有给出一个方便的方 ...
- 「雅礼集训 2017 Day1」字符串 SAM、根号分治
LOJ 注意到\(qk \leq 10^5\),我们很不自然地考虑根号分治: 当\(k > \sqrt{10^5}\),此时\(q\)比较小,与\(qm\)相关的算法比较适合.对串\(s\)建S ...
- Cglib 与 JDK动态代理
作者:xiaolyuh 时间:2019/09/20 09:58 AOP 代理的两种实现: jdk是代理接口,私有方法必然不会存在在接口里,所以就不会被拦截到: cglib是子类,private的方法照 ...
- sqlserver读取日志以及复制
首选,在事务日志中,到底有多少是需要复制的?使用以下命令,可以确定事务日志中被标志为复制的命令有多少. USE test GO SELECT count(*) FROM ::fn_dblog(NULL ...
- Linux学习笔记之Linux系统的swap分区
0x00 什么是swap分区 Swap分区在系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空 ...
- C#读写设置修改调整UVC摄像头画面-增益
有时,我们需要在C#代码中对摄像头的增益进行读和写,并立即生效.如何实现呢? 建立基于SharpCamera的项目 首先,请根据之前的一篇博文 点击这里 中的说明,建立基于SharpCamera的摄像 ...
- linux环境:FTP服务器搭建
转载及参考至:https://www.linuxprobe.com/chapter-11.html https://www.cnblogs.com/lxwphp/p/8916664.html 感谢原作 ...