c语言 文件读写 长文件名报错,文件读写,函数,元组和集合

1、文件读写

f = open('day4','r+',encoding = 'utf-8')

#读模式 r 打开不存在的文件会报错、只能读、不能写

#写模式 w #1、打开不存在的文件,会新建一个文件,会清空原有文件

#2、不能读、只能写

#追加模式 a #1、打开不存在的文件,会新建

#2、不能读、只能写

#读写模式 r+ 1、能读也能写

2、打开不存在文件的时候会报错

#写读模式 w+

1、能读

2、读不到内容,因为w先把文件内容清空

#追加读模式 a+

1、能读

2、能不能读到内容,读不到内容,因为上来指针就在最后,必须要有seek才能读到内容

f.seek(0)

1)文件直接循环

你直接循环文件对象,每次取的就是文件里面的每一行

for line in f:

print(line)

2)移动指针:

f.seek(0) # 移动文件指针到最前面

f.flush() # 刷新缓冲区,立即写到磁盘上。

# 计算机处理时,磁盘上的东西先读取到内存上,CPU再去读内存。读后再传入内存,再存到磁盘。

# 而定义变量是存在内存里。

# 内存和磁盘交换频繁会影响性能,所以有缓冲区,满了再写到磁盘里。

3)读取行:

print(f.readline())

读取一行的内容,

print(f.readlines())

读取所有内容,取每行元素组成的list

print(f.read())

读取所有内容

这三个会彼此影响,因为依次读,文件指针(写字符,光标)会移动。

4)删除更改文件名字:

import os

os.remove('stu.txt')#把user文件删掉

os.rename('.stu.txt','stu.txt') #更改文件名

5)记录指针位置:

f = open('access.log',encoding='utf-8')

point = f.tell() #记录指针的位置

f.seek(point) #指针回到记录的位置

2、集合、元组

1)集合: 用set,{}

s = set()

集合是无序的,自动去重的

# 集合天生可以去重

l = [1,2,2,5,5,3,5]

lset = set(l)

print(lset)

stus1 = {'胡绍燕','王义','王新','马春波','高文平'}

stus2 = {'胡绍燕','张芳芳','王新','马春波','高文平'}

#取交集(2种方法)

print(stus1.intersection(stus2))

print(stus1&stus2)

#取并集

print(stus1.union(stus2))

#print(stus1|stus2)

#差集

print(stus1-stus2)

print(stus1.difference(stus2))

#对称差集 只在一个集合里面出现过的

print(stus1.symmetric_difference(stus2))

print(stus1^stus2)

#增加元素

stus1.add('孙悟空')

#删除

stus1.pop()#随机删除一个

#stus1.remove('王新')

# 直接循环集合:取每一个元素

for s in stus1:

print(s)

2)元组: 用()元组也是一个list,但是它的值不能改变

# s = [1,2,3]

# t = (1,2,3) #元组。优先级高。

# m = (123)# 如果只一个元素,判断不出是否是元组。

# 如果一个元素的元组,元素后边要加,

# t[1]=4 #会报错。元组也无序,不可以修改

# print(t)

#print((4+5)*4)

3)俩个模块:

import string

print(string.ascii_lowercase)#取所有小写字母

print(string.ascii_uppercase)#取所有大写字母

print(string.digits)#取1-9自然数

print(string.ascii_letters)#取所有小写字母和大写字母

print(string.punctuation)#取特殊符号

import random

print(random.randint(1,23))#取1-23间的一个随机整数

s = [1,2,3,4]

print(random.choice(s))#随机选择一个元素

print(random.sample(s,3))#随机选择3个元素,放到list里

print(random.shuffle(s))#只能传list,打乱s顺序。但打乱后没有返回list,而是None

print(random.uniform(1,13))#取范围内一个小数,保留了很多位小数

f = random.uniform(1,13)

print(round(f,3))#取3位小数

3、函数

实现某个功能的一些代码。

提高代码的复用性。

函数必须被调用才会执行。

函数里面定义的变量:局部变量,只要一出了函数都不能用了

#定义一个函数

def hello():#定义一个叫hello的函数

print('hello')

#函数必须被调用才会执行

#调用函数

hello()#函数名后边加括号,才调用了函数

#定义函数

def write_file(file_name,content):#入参。定义个函数,有俩个变量名.其中file_name和content叫形参,是俩个形式参数

print(file_name,content)

with open(file_name,'a+',encoding='utf-8') as f:

f.write(content)

#调用函数:

# write_file('b.txt','123')

# write_file('a.txt','123')

# write_file('c.txt','12d3')

括号中的这个叫实参,实际参数

def read_file(file_name):#下边缩进部分叫函数体

with open(file_name,'a+',encoding='utf-8') as f:

f.seek(0)#a+,要注意指针位置

content = f.read()

return content#不写的话会返回None

#函数里面定义的变量,都是局部变量。只要一出了函数,就不能用了。

#需要思考怎样、需要不需要入参,怎样写return

#个人思考:入参是条件,return是目标

print(read_file('stu.txt'))#调用函数

return和print的区别:

return能返回一个值,而且能在调用的时候定义一个变量来接收。

print只是打印,只能看。

4.判断

非空即真,非0即真(不是真就是假,空就是假)(能省很多代码)

True

False  ''  None  []  {}

username = input('username:').strip()

if username:#if是真了才走,空是假的,所以空的时候不走。

print('username不为空')

else:

print('username为空')

if 1:#1是true

print('true')

else:

print('false')

if 0:#0是false

print('true')

else:

print('false')

5.高效处理文件方法:

#将文件的行做成一个字典

f = open('user')#文件对象,或者文件句柄。

d = {}

while 1: #第一种,但要求文件里不能有空行

line = f.readline()#一行一行读,效率高

if line:#直接循环,取代read

user,passwd = line.split(',')

d[user]=passwd

else:#见空停止

break

print(d)

#取文件行内容

2.直接循环

for line in f:#直接循环文件对象,取的就是每一行

print('每次循环的是',line)

#增加行

f = open('user','a+')

#f.write()

l = ['abc123\n','bcd123\n']

s = 'adfsdfasf\n'

f.writelines(l)#高效方法,依循环依次将定义的list每一个元素写进去

如果是字符串儿的话,还是用write吧

更改文件:第一种

with open('user','a+') as f:#会自动判断,关闭文件

f.seek(0)

result = f.read()

new_result = result.replace('jjj','ABC')#替换了,但并不能更改到文件中

f.seek(0)

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

f.write(new_result)

#更改文件:第二种

import os

with open('user')as fr,open('.users','w')as fw:

for line in fr:#从需要修改的文件里面读

new_line = line.replace('abc','ABC')#需要更改的更改,不需要的不做更改,直接定义

fw.write(new_line)

os.remove('user')#把user文件删掉

os.rename('.users','user')#把users改名儿为user

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值