python中的文件操作

一、文件的基本操作

1、文件打开的三个步骤:

1、打开
2、操作
3、关闭(如果不关闭会占有文件描述符)

 

f = open('/mnt/python')                
print(f.read())                   #查看文件的内容
f.close()

 

 

二、文件铐的读写操作

参数是否能进行读写操作文件不存在进行的操作
r只读不写 文件不存在,会进行报错
r+可以进行读写操作 文件不存在会进行报错,默认情况下,从文件指针所在的位置开始写入
w只能进行写的操作     会清空文件之前的内容,文件不存在,不会报错,会创建新的文件
w+可以进行读写操作   会清空文件的内容,文件不存在,不会进行报错,会创建新的文件
a只能进行只写操作不会清空文件内容,文件不存在,会进行报错
a+可以进行文件的速写操作 不清空文件的内容,在末尾进行追加,不进行报错

 

       1、a的使用

f = open('/mnt/python','a')                 #'a'不会清空文件的内容,在文件的尾加上追加新的内容
print(f)
print(f.write('redhat\n'))
f.close()

2、a+的使用方法

#1.打开文件
f = open('/mnt/python','a+')            ##表示追加内

#2.操作
f.write('haha\n')                       ##之间追加需要追加的内容
print(f.tell())
f.close()

 

 

3、w的使用

f = open('/mnt/python','w')                 #'w'会清空文件之前的内容并写入新的内容
print(f)
print(f.write('redhat\n'))
f.close()

 

4、文的操作方法

#2.操作

#1.打开文件
f = open('/mnt/python')
#如何判断当前文件对象所拥有的权限
print(f.readable())   #查看文件是否有读的权限
print(f.writable())   #查看文件是否有读的权限
结果:(只有为真或者为假)
    True
    False

 

 

5、判断指针所在的位置

#1.打开文件
f = open('/mnt/python')
#2.操作
#判断指针所在的位置
# print(f.tell())       #读取文件的内容从第一行开始
# print(f.read())
# print(f.tell())       #读完文件的内容(最后一个字符所在的位置)
# print(f.read())

 

 

5、读取二进制文件

f1  = open('/mnt/happy.jpg',mode = 'rb')
content = f1.read()
f1.close()
#写入需要复制的内容
f2 = open('/mnt/westos.jpg',mode='wb')
f2.write(content)
f2.close()



 

6、按行读取

# """
# 默认情况下读取文件 小文件:直接用read读取
# 如果是一个大文件(size>=mem):readline()
# """
# 按行读取
f = open('/mnt/python','rb+')
# print(f.readline())         ##读取第一行的内容
# print(f.readline())         ##读取第二行的内容
# print(f.readline())         ##读取第三行的内容
# print(f.readline())         ##当读取的内容为空是会返回 b''
# print(f.readline())
#

结果:
    b'redhat\n'
    b'*******\n'
    b'hahahahahahahahahahahahahaha\n'
    b''
    b''
    b''

 


7、按字节读取
 

# f = open('/mnt/python','rb+')
print(f.read(20))                     ##读取20个字节的内容

结果:
    b'redhat\n*******\nhahah'

 

 

8、读取文件内容并反回一个列表

# # 读取文件内容,并返回一个列表 列表元素分别为文件的行内容
# # 读取一个文件,返回一个列表,去掉后面的\n
f = open('/mnt/python','rb+')
print(f.readlines())                    ##表示读取所有的行的内容


结果:
    [b'redhat\n', b'*******\n', b'hahahahahahahahahahahahahaha\n']

 


9、指针的移动

f = open('/mnt/python','rb+')
print(f.read(100))                  ##表示读取100个字符
print(f.tell())                     ##表示指针所在的位置
f.seek(0,0)                         ##第一个0表示指针移动的方向向前移  第二个0表示指针移动到文件的开头
print(f.tell())
f.seek(0, 1)                        ##第一个0表示指针移动的方向向前移  第二个0表示指针移动到文件的当前位置
print(f.tell())
f.seek(1,2)                         ##第一个1表示指针移动的方向向后移  第二个2表示指针移动到文件的末尾
print(f.tell())
f.close()
# seek():指针的移动
#     第一个参数:偏移量 >0:向后移动 <0:向前移动
#     第二个参数:
#         0:移动到文件开头
#         1:当前位置
#         2:移动到文件的末尾


结果:
    b'redhat\n*******\nhahahahahahahahahahahahahaha\n'
    44
    0
    0
    45

 

 


10、文件只有读的权限没有写的权限
 

f = open('/mnt/python', 'r')
print(f.writable())
print(f.readable())
f.close()

#文件有读写的权限
f = open('/mnt/python', 'r+')
print(f.writable())
print(f.readable())
f.close()


结果:
    False
    True
    True
    True

 

 

11、w的使用方法

#**********w***********
#只能进行写操作
#会清空文件之前的内容
#文件不存在,不会进行报错,会创建新的文件,并进行写操作
f = open('/mnt/python', 'w')
print(f.writable())
print(f.readable())
f.write('hehe\n')
f.seek(0)
f.close()

结果:
    True
    False

 

12、w+的使用方法

#**********w+***********
#只能进行写操作
#会清空文件之前的内容
#文件不存在,不会进行报错,会创建新的文件,并进行写操作
f = open('/mnt/python', 'w+')
print(f.writable())                     ##查看文件是否有写的权限
print(f.readable())                     ##查看文件是否有读的权限
f.write('******\n')                     ##在文件中写的内容
f.seek(0)
print(f.read())
f.close()


结果:
    True
    True
    ******

 

 

13、a的使用方法

#**********a***********
#只能进行写操作
#不会清空文件之前的内容
#文件不存在,会进行报错
f = open('/mnt/python', 'a')
print(f.writable())                     ##查看文件是否有写的权限
print(f.readable())                     ##查看文件是否有读的权限
f.write('@@@@@@\n')                       ##写入需要添加的内容
f.seek(0)
f.close()

结果:
    True
    False

 

 

14、a+的使用方法

#**********a+***********
#文件进行可读可写操作
#不会清空文件之前的内容,在末尾追加
#文件不存在,会进行报错
f = open('/mnt/python', 'a+')
print(f.writable())                     ##查看文件是否有写的权限
print(f.readable())                     ##查看文件是否有读的权限
f.write('%%%%%\n')                     ##在文件中写的内容
f.seek(0)
print(f.read())
f.close()

结果:
    True
    True
    ******
    hehe
    @@@@@@
    %%%%%

 

 

 


作业练习:

(1)、#创建文件data.txt 文件共有100000行
              #每行存在一个1~100之间的整数
 

import random
f = open('data.txt','a+')                           ##创建data.txt 文件
for i in range(100000):                             ##设置文件的行数
    f.write(str(random.randint(1,100)) + '\n')      ##random.randibt(1,100)表示随机生成1~100之间的数
f.seek(0,0)                                         ##表示光标移动到行首的位置
print(f.read())
f.close()

 

 

 

(2)、# 生成100个MAC地址并写入文件中,MAC地址前6位(16进制)为01-AF-3B
             # 01-AF-3B-xx-xx-xx
             # -xx
            # 01-AF-3B-xx
            # -xx
            # 01-AF-3B-xx-xx
            # -xx
             # 01-AF-3B-xx-xx-xx

import string
import random
def create_mac():
    mac = '01-AF-3B'
    key_name = string.hexdigits                 ##随机生成 0123456789abcdefABCDEF
    print(key_name)
    for i in range(3):
        n = random.sample(key_name,2)           ##在0123456789abcdefABCDEF之间选出两个数 (从16进制的字符串中随机选择两个数字返回值是一个列表)
        sn = '-' + ''.join(n).upper()
        mac += sn
    return mac
def main():
    with open('mac.txt','w') as f:              ##生成mac.txt文件
        for i in range(100):
            mac = create_mac()
            print(mac)
            f.write(mac + '\n')                 ##将生成的mac地址写入文件中
main()

题目补充:
import string
 key_name = string.hexdigits                 ##随机生成 0123456789abcdefABCDEF
    print(key_name)
结果:
    0123456789abcdefABCDEF

import random
n = random.sample(key_name,2)           ##在0123456789abcdefABCDEF之间选出两个数
print(n)

结果:
    ['4', 'C']
​

 

 


(3)、题目要求:
             生成一个大文件ips.txt,该文件的要求为1200行,每行随机为172.25.254.0/24
             段的IP,读取ips.txt文件统计这个文件中IP出现的频率排名前10的IP
 

题目分析:
1、使用open进行文件的打开,使用'w+',当文件不存在时候可以进行文件的
创建,
2、使用for循环,进行对文件的写入,进行字符的拼接,网段后面的数字进行
随机数的生成。
3、对文件内容进行逐行煸历,进行文件的逐行煸历,使用with open('ips_txt') as f
for ip in f:。
3、进行排序函数的编辑
4、使用sorted函数进行所有的IP出现的次数进行从小到大的排序
5、对排好的列表进行切片操作,找出排名故后10的IP
"""
import random
import os
f = open('ips.txt','w+')
content = []
for i in range(1200):
    num = random.randint(0,255)
    num2 = '172.25.254.' + str(num)
    f.writelines(num2 + '\n')
 
def count_ip(x):
    return x[1]
 
dict_ip1 = {}
with open('ips.txt') as f:
    for ip in f :
        if ip not in dict_ip1:
            dict_ip1[ip] = 1
        else:
            dict_ip1[ip] += 1
list_ip = sorted(dict_ip1.items(),key=count_ip)
result_ip = list_ip[::-1][:10]
print(result_ip)


结果:
    [('172.25.254.60\n', 11), ('172.25.254.213\n', 10), ('172.25.254.66\n', 10), ('172.25.254.173\n', 10), ('172.25.254.93\n', 10), ('172.25.254.212\n', 9), ('172.25.254.88\n', 9), ('172.25.254.144\n', 9), ('172.25.254.230\n', 9), ('172.25.254.46\n', 9)]

 

 

 

 

 

三、上下文管理器:打开文件 执行完with语句后 自动关闭文件

 

1、上下文的基本格式

f = open('/mnt/python')
print(f.read())
with open('/mnt/python') as f:      ##with open('/mnt/python') as f:  等同于  f = open('/mnt/python')
    print(f.read())
print(f.closed)

 

 


2、将第一个文件的内容写入第二个文件中
 

with open('/mnt/python') as f,open('passwd','w+') as f2:
    f2.write(f.read())
    f2.seek(0,0)
    print(f2.read())                    ##查看f2的内容

结果:
    haha

python2版本中的用法
"""
python2.x
with open('/tmp/passwd') as f:
    content = f.read()
with open('/passwd','w+') as f2:
    f2.write(content)
"""



3、读取一个文件,返回一个列表,去掉后面的\n
 

方法一:
f = open('/mnt/python')
print(list(map(lambda x:x.strip(),f.readlines())))

结果:
    ['haha', '']


方法二:
f = open('/mnt/python')
print([line.strip() for line in f.readlines()])
f.close()

结果:
    ['haha', '']

方法一、

 

方法二、

 

 

 

 

练习题:
"""
# 创建文件data.txt 文件共有100000行
# 每行存放一个1~100之间的整数
"""
 

import random
f = open('date.txt','a+')
for i in range(100000):
    f.write(str(random.randint(1,100)) + '\n')
f.seek(0,0)
print(f.read())
f.close()

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值