python基础学习3-文件读写、集合、json、函数

 

1       文件读写补充

文件修改

方法1:简单粗暴直接:

1、  先获取到文件里面的所有内容

2、  然后修改文件里面的内容

3、  清空原来文件里面的内容

4、  重新写入

f = open(‘test1.txt‘,‘r+‘)

f.seek(0)

all_data = f.read()

new_data = all_data.replace(‘123‘,‘python‘)

f.seek(0)          
#将指针移到最前面

f.truncate()        #清空原来文件内容

f.write(new_data)   #重新写入文件内容

f.flush()

f.close()

方法2:高效的处理方式

1、  先打开原来的文件,再打开一个空文件

2、  循环处理原来文件里每一行数据,处理完之后写到新文件里

3、  将原来的文件删除,将新文件名字修改成原来文件的名字

import os

with open(‘words.txt‘) as fr,open(‘words1‘,‘w‘) as fw:

for line in fr:

line = line.lstrip()    #去掉左边的空格

if line:        #判断这一行是否有数据

line = line.replace(,‘you‘)      #替换数据

fw.write(line)     
#写到新文件里面

os.remove(‘words.txt‘)         #删除原来的文件

os.rename(‘words1‘,‘words.txt‘)     #将新文件重命名为原来文件名

使用with open方法打开文件会自动关闭,不需要在手动去关闭这个文件;

f = open(笔记.txt‘)      #打开的文件称为文件句柄或文件对象

for line in f:      #直接循环文件对象,每次循环的时候就是去的每一行数据

print(‘line‘,line)

2      
集合、json模块

集合作用:

1、  天生去重

2、  关系测试-交集,差集,并集,反向差集,对称差集

nums = [1,2,3,2,3,4,1,5,6]

print(set(nums))

list = [1,2,3,4,5,3,6]      #列表

list_dict = {2,3,4,3}

list_2 = [2,3,5,7,8]

list = set(list)            #将列表转换为集合

list_2 = set(list_2)

print(交集:,list.intersection(list_2))    #交集,取出重复数据

print(list & list_2) 
#这个也叫交集

print(并集:,list.union(list_2))           #并集,去重统一展示

print(list | list_2)  #这个也叫并集

print(差集:,list.difference(list_2))      #差集,取出list中有的,list_2中没有的

print(list - list_2)  #这个也叫差集

list_3 = set([1,3,6])

print(子集:,list_3.issubset(list))        #子集,list_3的值在list中全有,返回的是一个布尔类型的结果

print(父集:,list.issuperset(list_3))      #父集

print(对称差集:,list.symmetric_difference(list_2))        #对称差集,将listlist_2中互相没有的值都取出来,把两集合里都有的去掉

print(list ^ list_2)  #这个也叫对称差集

#集合操作

list.add(123)   #每次只能添加一个

print(list)

list.update([888,999])    #可以同时添加多个

print(list)

list.remove(999)       
#删除指定元素

print(list)

list.pop()          #随机删除

print(list)

list.discard()      #删除一个不存在的元素不会报错

print(list)

实例:

#监控日志

#1、如果一分钟之内某个ip访问超过100

#2、就把他的ip找出来,split,取第一个元素

#3、找出所有的ip,统计次数

#4、判断每个ip次数大于100,就发邮件

#5、记录文件指针,给下一次读的时候用

#6、等待60s,重新读取文件

import time

point = 0        #存放的是文件初始的位置

while True:

with open(‘access.log‘) as f:

f.seek(point)

ip_info = {}        #存放ip和它出现的次数

for line in f:

ip = line.split()[0]

if ip in ip_info:

#ip_info[ip] = ip_info[ip] + 1

ip_info[ip] += 1

else:

ip_info[ip] = 1

point =
f.tell()   #获取当前文件指针的位置

for k in ip_info:

if ip_info.get(k)
>= 100:

print(ip在攻击你%s‘%k)

time.sleep(60)       #等待60s

json是一个字符串,只不过长的像字典;

在json里只有双引号,没有单引号;

import json

user_info = ‘‘‘

{"test1":"123456","test2":"123456"}

‘‘‘

user_dic =
json.loads(user_info)        #
json串(字符串)转换成字典

print(user_dic)

print(‘user_info‘,type(user_info))

print(‘user_dic‘,type(user_dic))

stu_info = {‘zhangsan‘:{‘cars‘:[‘BMW‘,‘Ben-z‘]}}

stu_str = json.dumps(stu_info)      #把字典转换成json

print(‘stu_str‘,type(stu_str))

print(stu_str)

f = open(‘stu.txt‘,‘w‘)

f.write(stu_str)

f.close()

f = open(‘stu.json‘, ‘w‘)
json.dump(stu_info,f,indent=4) #不需要自己在write,人家会帮你写入文件,后面加入indent=4帮你自动进行缩进,4表示缩进4个字符

3      
函数

1、函数就是一个功能,一个方法,简化代码

2、函数必须得调用才会执行

3、一个函数只做一件事

4、重复的代码是低级的

5、实现同样的功能,代码越少越好

def say(name):                  #函数名,括号里写参数就是形参(形式参数即变量)

print(‘%s hahaha‘%name)    #函数体

say(‘zhangshan‘)               #函数名里面加括号就是调用上面的函数,括号里面的参数是实参(实际参数)

def say1(name,sex=):                  #函数名,括号里写参数就是形参(形式参数即变量)

#必填参数,如name

#默认值参数,非必填,如sex=‘

print(‘%s hahaha 
性别%s‘%(name,sex))    #函数体

say1(‘zhangshan‘)               #函数名里面加括号就是调用上面的函数,括号里面的参数是实参(实际参数)

在函数里面的变量都是局部变量,它只能在函数里面使用,函数执行结束就没有这个变量了;

返回值,如果需要用到函数的处理结果的话,就写return,不需要的话,那就不用写;函数里面如果碰到return,函数立即结束;

# 函数立即结束def calc(a,b):

res = a * b

print(res)

return res          #没有return返回时,函数返回的数据类型就是NoneType,有return的类型就是函数的结果类型

cur_money = 8000

nx =
calc(1000,13)

print(nx+cur_money)

def
my():

for i in range(100)

if i == 2:

return

print(my())

#写一个校验输入的字符串是否为小数的程序

#思路:

# 10.12 
1.23  -12.3
只有一个小数点,判断小数点个数;

# 2、正小数的情况下,小数点左边和右边都是整数的话,才合法,通过分割符去判断

#3、负小数的情况下,小数点右边整数,左边必须是“-”开头,且只有一个负号;

#-5.4

#[‘-5‘,‘4‘]

#[1:]

def check_float(s):

s = str(s)

if s.count(‘.‘) == 1:

s_list = s.split(‘.‘)

#5.3  分割之后就是[5,3]

left = s_list[0]       
#小数点左边

rigth = s_list[1]      
#小数点右边

if left.isdigit()
and rigth.isdigit():

return True

elif left.startswith(‘-‘) and left.count(‘-‘) ==1
and left[1:].isdigit() and rigth.isdigit():
#left.count(‘-‘) ==1这个判断可以不用写

return True

return False

print(check_float(1.8))

print(check_float(-2.4))

print(check_float(‘-s.5‘))

print(check_float(‘50.232ss‘))

print(check_float(-3-4.4-9))

def my_file(name,content=None):

with open(name,‘a+‘) as f:

f.seek(0)

if content:

f.write(content)

else:

return f.read()

原文地址:https://www.cnblogs.com/better0903/p/9221844.html

时间: 2024-10-31 16:11:49

python基础学习3-文件读写、集合、json、函数的相关文章

python新手学习之文件读写之修改

文件除r.w.a方式打开外,还可以有多种组合方式如r+ w+ a+等多种方式 1.r+ 读写模式介绍,开始读是从一行开始读,写永远从最后开始写(类似于追加) # f = open("test.txt","r+",encoding ="utf-8") f.readline() f.readline() f.readline() # 不管如何读或者是seek.文件永远从尾部追加.写时候,不会影响读光标位置. print("当前光标位置:&q

python基础操作_文件读写操作

#文件读写# r只能读不能写,且文件必须存在,w只能写不能读,a只能写不能读# w+是写读模式,清空原文件内容# r+是读写模式,没有清空原文件内容,# 只要有r,文件必须存在,只要有w,都会清空原文件# 如果在open的时候没有指定模式,那就是r的模式打开文件.# a+ 又能写又能读又不校验文件是否存在,还不清空原文件,完美啊# b是2进制的模式打开或者读写.如rb+ wb+ ab+# readline 读一行# readlines 读全部# writelens 写全部f=open('E:\i

Python基础知识之文件读写与修改

基本操作 f = open("file1", "r")  # 打开文件 first_line = f.readline() # 读一行 data = f.read() # 读取剩下所有内容,文件大时候不要用 f.close()  #关闭文件 如果我们想循环文件,并且在第九行输出分割的话: for index, line in enumerate(file.readlines()):     if(index == 5):         print("--

python基础学习4-函数、内置函数、os模块、time模块

  1       函数 1.1     字符串格式化方法 Python中字符串格式化输出的几种方法: https://www.cnblogs.com/hongzejun/p/7670923.html 字符串格式化另外一种方式format方式 #字符串format()方法 #第一种 import datetime msg = '欢迎光临{name},今天的日期是{today}' msg = msg.format(name = 'zhangsan',today = datetime.datetim

python基础学习07(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #file与input output #文件对象 #简单说来,就是写入和读取的方式 #file(),open()2个操作都是一样的,一般推荐open() #语法 # open(name[, mode[, bufferin

python基础学习05(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #dict{键:值} #哈希 #注:字典是无顺序的,所以你懂的 #创建与赋值 dict1={} dict2={'name':'apply','avg':24,'sex':'man'} print dict1,dict2

Python基础学习(九)

Python 多线程 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度 程序的运行速度可能加快 在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下我们可以释放一些珍贵的资源如内存占用等等. 线程在执行过程中与进程还是有区别的.每个独立的线程有一个程序运行的入口.顺序执行序列和程序的出口.

Python基础学习(十)

Python I/O模型 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 概念说明 在进行解释之前,首先要说明几个概念: 用户空间和内核空间 进程切换 进程的阻塞 文件描述符 缓存 I/O 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件

Python基础学习 总结篇

Python基础学习总结 先附上所有的章节: Python学习(一)安装.环境配置及IDE推荐 Python学习(二)Python 简介 Python学习(三)流程控制 Python学习(四)数据结构(概要) Python学习(四)数据结构 —— int float Python学习(四)数据结构 —— str Python学习(四)数据结构 —— bool Python学习(四)数据结构 —— list tuple range Python学习(四)数据结构 —— set frozenset