1、文件操作(2)
 
代码
 f = open('a.txt','a') # "a" 如果源文件不在,会自动创建

 f.write('abc')
 result = f.read()
 print(result)
 f.close()

 # r read 能读,不能写,打开不存在的文件会报错
 # w write 能写,不能读
 # a add 能写,不会清空以前的内容,不能读
 
 
模式
说明
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()
 
 
 
模式
 
说明
r
不能写,打开不存在的文件会报错
w
不能读
a
追加
不删除原来内容,新增新的内容
r+
读写模式
能读能写,打开不存在的文件会报错
w+
写读模式
能读能写,但是会清空以前的东西
a+
追加模式
能读能写,不会清空以前的东西
 
1>先读和后读写的位置不一样
代码
 f = open('a.txt','r+',encoding='utf-8')
 # print(f.read())
 f.write('AAAAA5')  # 'r+'模式能读能写
 f.close()
 
2>写完之后读不到东西
代码
 f = open('a.txt','w+',encoding='utf-8')
 print(f.read())
 f.write('w+模式')
 print(f.read())
 f.close()
 
3>读不到东西
代码
 f = open('a.txt','a+',encoding='utf-8')
 f.seek(0)  # 移动文件指针
 print(f.read())
 f.write('a+模式')
 f.close()
 
 
 
2、高效读取文件方法
 
代码
 f = open('access.log',encoding='utf-8')
 for line in f:
     print('每一行的内容:',line)  # 每次只读一行内容,直接循环
 
 
3、监控服务器日志IP次数
 
1、监控服务器日志,找出每分钟访问超过100次的ip地址
分析:
       1>读取文件,获取到文件里所有的ip地址
       2>把ip地址存起来(用字典还是列表?)---字典;key是ip地址,value是次数
       3>循环字典,判断value大于100的
代码
 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)
 
 
 
4、修改文件内容
 
1>简单直接粗暴的方式
 
代码
 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()
 
2>第二种 逐行修改
 
代码
 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文件
 
 
代码
 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')
 
5、非空即真
 
 
非空即真,非0即真
代码
 # 布尔
 a = 1
 b = 2
 s = ''
 l = []
 d = {}
 s1 = set()
 t = ()

 username = input('user:').strip()
 if username:
     print('欢迎登录%s' %username)
 else:
     print('用户名不能为空')
 
 
6、json操作
 
代码
 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串就是字符串
 
 
1>把字典转成字符串
代码
 d = {","age":18}
 with open('users.txt','w',encoding='utf-8') as f:
     json_d = json.dumps(d)
     f.write(json_d)
2>把字符串转成字典
代码
 with open('users.txt','r',encoding='utf-8') as f:
     result = f.read()
     json.loads(result)
3>转成json格式
代码
 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 (控制有几个缩进)”
 
 
4> dump、dumps区别&load、loads区别
代码
 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的是操作文件
 
 

7、函数

定义函数

1、意义:函数是实现某个功能的一些代码,提高代码的复用性。

2、定义:用def关键字定义函数,

3、函数组成:函数由函数名、形参、函数体、调用函数(里面会有函数体)组成

4、要使用函数,必须要调用它

 
(1)定义一个函数 def [函数名]()
代码
 def say_hello(msg):
     print(msg)
(2)调用函数(函数只有在调用的时候才会执行)
代码
 say_hello('abc') # 调用函数
 
定义函数:为了节省代码,避免重复代码
 
 
1> 函数参数值
代码
 # 定义一个函数,告诉我文件名和内容
 def write_file(filename,content):
     f = open(filename, 'w')
     f.write(content)
     f.close()

 write_file('wjq.json','sdfsdfsdf')
 
2> 在函数返回值遇到的问题
 
代码
 # 函数里面调用的变量都是局部变量,只在函数里面可以用,出了函数就不可以用
 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)
 
 
3> 函数例子
代码
 # 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)
 
例子
代码
 # 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函数,立即结束执行
 
4> 函数里面遇到return函数,立即结束执行
 
代码
 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)
 
 
 
8、默认值参数
 
代码
 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')
 
 
传入多个参数方法
代码
 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') # 这种方式是不对的
 
 
9、全局变量
 
代码
 file_name= 'user.json' # 全局变量

 def func():
     global file_name
     file_name = 'abc.json' # 先从自己函数里面找,如果没有就从全局变量里面找
     print(file_name)

 func()

 print(file_name)
 
代码
 def test():
     global a
     a = 5

 def test1():
     c = a + 5
     return c

 res = test1()
 print(res) # 只调用了test1()函数,没有调用test(),所以报错
 
 
代码
 money = 500
 def test(consume):
     return  money - consume

 def test1(money):
     return test(money) + money

 money = test1(money)
 print(money)
 
常量
# 常量
 
代码
 # 常量
 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操作、监控日志代码、高效读取文件的更多相关文章

  1. linux 判断文件最后更新时间 实现监控日志是否有输出功能

    linux 判断文件最后更新时间 实现监控日志是否有输出功能. 需求:监控log.txt日志文件,超过一分钟没输出内容就认为是停了,则自动启动程序. 用stat 可以看文件的更新时间stat -c % ...

  2. php高效遍历文件夹、高效读取文件

    /** * PHP高效遍历文件夹(大量文件不会卡死) * @param string $path 目录路径 * @param integer $level 目录深度 */ function fn_sc ...

  3. Python 文件修改-函数介绍

    上节课复习:1.字符编码 1.1 如何解决乱码问题: 字符存取使用的编码标准不一致 1.2 文件头 在文件的首行写入文件头,用于控制Python解释器读取py文件内容时使用的编码 #coding:文件 ...

  4. Python语言系列-04-高阶函数

    闭包 #!/usr/bin/env python3 # author:Alnk(李成果) # 什么是闭包 # 1,闭包存在于函数中 # 2,闭包就是内层函数对外层函数(非全局变量)的引用 # 3,最内 ...

  5. Python语言程序设计之三--列表List常见操作和错误总结

    最近在学习列表,在这里卡住了很久,主要是课后习题太多,而且难度也不小.像我看的这本<Python语言程序设计>--梁勇著,列表和多维列表两章课后习题就有93道之多.我的天!但是题目出的非常 ...

  6. Python 语言来编码和解码 JSON 对象

    Json函数: json.dumps: Python标准库中的json模块,集成了将数据序列化处理的功能. 将 Python 对象编码成 JSON 字符串 语法: json.dumps(obj, sk ...

  7. python第三章:函数

    在前面章节中,介绍了一些input(),print(),len()等内建函数,还有random,math等标准库相关函数,这些都是可以直接使用的,但是很多时候,我们也是可以编写自己的函数. 看个例子: ...

  8. Python(三)enumerate函数

    原文链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143177932 ...

  9. python通过装饰器检查函数参数的数据类型的代码

    把内容过程中比较常用的一些内容记录起来,下面内容段是关于python通过装饰器检查函数参数的数据类型的内容. def check_accepts(f): assert len(types) == f. ...

随机推荐

  1. centos7修改宝塔面板端口6666无法访问

    相信你看到我这篇随笔的时候已经查阅了不少资料了吧 先看看我和我朋友的对话吧 原因,想修改宝塔默认面板端口8888为6666,用的阿里云服务器,并且在安全组添加了6666端口 然后无法访问,想到linu ...

  2. Java学习:数据库连接池技术

    本节内容 数据库连接池 Spring JDBC : JDBC Template 数据库连接池 1.概念:其实就是一个容器(集合),存放数据库连接的容器 当系统初始化好后,容器中会申请一些连接对象,当用 ...

  3. EasyUI datagrid-export 将datagrid的数据导出至Excel-解决科学计数法

    通过EasyUI datagrid-export.js 将datagrid的数据导出至Excel的时候,如果有类似身份证一样很长的数字,需要在后台返回数据的时候在数字前增加一个 “ ”,将数字转为字符 ...

  4. NetCore 统一处理 webapi 返回null 转为“”

    数据库中部分表字段允许空值,则代码中实体类对应的字段类型为可空类型Nullable<>,如int?,DateTime?,null值字段序列化返回的值都为null,前端对应字段赋值需要做nu ...

  5. Node.js 中 exports 和 module.exports 的区别

    每一个模块中都有一个 module 对象, module 对象中有一个 exports 对象 我们可以把需要导出的成员都放到 module.exports 这个接口对象中,也就是 module.exp ...

  6. window 10 npm install node-sass报错

    最近准备想用vue-cli初始化一个项目,需要sass-loader编译: 发现window下npm install node-sass和sass-loader一直报错, window 命令行中提示我 ...

  7. HTML 图像标签(img)

    一.标签属性 属性就是一个实体的特性,例如:手机的属性有大小,颜色等,HTML标签也有自己的属性. 使用HTML制作网页时,如果想让HTML标签提供更多的信息,可以使用HTML标签的属性加以设置. 语 ...

  8. android studio学习----构建编译

    项目创建成功后会自动下载Gradle,这个过程特别慢,建议翻墙.下载的Gradle在Windows平台会默认在 C:\Documents and Settings\<用户名>.gradle ...

  9. CSS 样式的使用方式、选择器

    在html中使用css的三种方式: 1.行内样式:同过元素的style属性来设置 <p style="font-size:20px; color:red">hello& ...

  10. Mysql 游标初识

    MySql 游标初识 认识 游标(cursor), 按字面意思可理解为, 游动的标识, 或者叫做"光标", 这样更容易理解. 就好比现有一张表存储了n行记录, 然后我想每次取出一行 ...