python文件

r:
  -只能读,不能写
  -读取的文件不存在,会报错
r+:
  -可读可写
  -文件不存在,报错
w:
   -只能写,不能读
   -会清空覆盖文件内容
   -如果文件不存在,会新建文件
w+:
  -可读可写
  -文件存在,会覆盖原文件
  -文件不存在,创建新文件
a:
   -只能写,不能读
   -文件不存在,新建文件不报错
   -文件存在,不会清空文件内容
a+
   -可读可写
   -文件不存在的时候,新建文件不报错
   -不会清空文件内容


文件操作三部曲:打开 操作 关闭

#打开
f=open('passwdss','a+')
#操作
# content=f.read()
f.write('java')
# print content
f.close()
#关闭文件

#正确读取大文件
file=open('passwd')
#为什么要设定为无限循环:
#因为我们不知道循环的条件
#我们不知道文件到底有多少行
while True:
    text=file.readline()
    #判断是否读取到了内容
    #如果文件指针到文件的最后一行,那么就读取不到内容了
    if not text:
       break
    #每读取一行的末尾已经有一个'\n'
    print text
file.close()

打开一个已经有的文件,读取完整的内容,并写到另一个文件中去

#源文件以只读的方式打开
file_read=open('passwdss')
#目标文件以只写的方式打开
file_write=open('passwd_copy','w')
#从源文件中读取内容
text=file_read.read()
#将读取到的内容写道目标文件
file_write.write(text)
#关闭文件
file_read.close()
file_write.close()

读取二进制文件的时候
rb wb ab
rb+ wb+ ab+

#读取二进制文件的内容
f1=open('good.jpg',mode='rb')
content=f1.read()
f1.close()

with open ('data.txt')as f:
    lines=f.readline()
    print lines
for line in lines:
        print line

文件指针:
文件指针标记从哪个位置开始读取数据
第一次打开文件时,通常文件指针会指向文件的开始位置
当执行了read方法后,文件指针会移动到读取内容的末尾

file = open('passwdss')
text = file.read()
print text
print type(text)
print len(text)
print '******'
# 移动文件指针到文件开头
file.seek(0)
text = file.read()
print len(text)
file.close()

京东二面笔试题
1.生成一个大文件ips.txt,要求1200行,每行随机为172.25.254.0/24段的op
2.读取ips.txt文件统计这个文件中ip出现频率排前10的ip

import random
def create_ips_file(filename):
    ips=['172.25.254.'+str(i) for i in range(1,255)]
    with open (filename,'a+') as f:
        for count in range(1200):
            f.write(random.sample(ips,1)[0]+'\n')
def sorted_by_ip(filename,count=10):
    ips_dict=dict()
    with open(filename) as f:
        for ip in f:
            if ip in ips_dict:
                ips_dict[ip]+=1
            else:
                ips_dict=1
    sorted_ip=sorted(ips_dict.items(),
                    key=lambda x:x[1],reverse=True)[:count]
    return sorted_ip
print sorted_by_ip('ips.txt')

os模块

import os

# 1.返回操作系统类型,值为posix,是linux操作系统,
# 值为nt,是windows系统
print os.name
#
# # 2.返回操作系统的详细
print os.uname()
#
# # 3.系统的环境变量
print os.environ
print os.environ.get('PATH')

# 4.判断是否是绝对路径(不会判断文件或目录是否存在)
print os.path.isabs('/tmp/westos')
print os.path.isabs('/hello')

# 5.生成绝对路径
print os.path.abspath('hello.png')
print os.path.join('/home/kiosk', 'hello.png')
print os.path.join(os.path.abspath('.'), 'hello.png')

# 6. 获取目录名或者文件名
filename = '/home/kiosk/PycharmProjects/python/20180826python/Day08/hello.png'
print os.path.basename(filename)
print os.path.dirname(filename)

# 7. 创建目录/删除目录
os.mkdir('img')
os.makedirs('img/file') # mkdir -p
os.rmdir('img')

# 8. 创建文件/删除文件
os.mknod('westos.txt')
os.remove('westos.txt')

# 9.文件的重命名(mv)
os.rename('westos.txt','data1.txt')

# 10.判断文件或者目录是否存在
print os.path.exists('img')
print os.path.exists('data1.txt')

# 11.分离后缀名和文件名
print os.path.splitext('hello.png')

# 12.将目录名和文件名分离
print os.path.split('/tmp/hello/hello.png')

练习:1. 在当前目录新建目录img, 里面包含多个文件, 文件名各不相同(X4G5.png)
             2.将当前img目录所有以.png结尾的后缀名改为.jpg

import os
import random
import string
def gen_code(len=4):
    # 随机生成4位文件名
    li = random.sample(string.ascii_letters + string.digits, len)
    # 将列表元素拼接成字符串
    return ''.join(li)
def create_file():
    # 随机生成多个文件名
    li = {gen_code() for i in range(100)}
    os.mkdir('img')
    for name in li:
        os.mknod('img/' + name + '.png')
# create_file()
def modify_suffix(dirname, old_suffix, new_suffix):
    """
    :param dirname:  所要操作的目录
    :param old_suffix: 之前的文件后缀
    :param new_suffix: 新的文件后缀
    :return:
    """
    # 1.判断查找的目录是否存在,如果不存在,显示报错
    if os.path.exists(dirname):
        # 2.找出所有以old_suffix(.png)结尾的文件
        pngfiles = [filename for filename in os.listdir(dirname)
                    if filename.endswith(old_suffix)]
        # 3.将文件名和后缀名分开,留下文件名
        basefiles = [os.path.splitext(filename)[0] for filename in pngfiles]
        print basefiles
        # 4.文重命名
        for filename in basefiles:
            # 需要加上目录名
            oldname = os.path.join(dirname, filename + old_suffix)
            newname = os.path.join(dirname, filename + new_suffix)
            os.rename(oldname, newname)
            print '%s 重命名成%s成功' % (oldname, newname)
    else:
        print '%s 不存在不能操作....' % dirname
modify_suffix('img','.jpg','.png')

练习:
    1. 在当前目录新建目录img, 里面包含多个文件, 文件名各不相同(X4G5.png)
    2. 将当前img目录所有以.png结尾的后缀名改为.jpg

import os
import string
import random
import sys
def gen_code(len=4):
    # 随机生成四位的文件名
    li = random.sample(string.ascii_letters + string.digits, len)
    # 将列表元素拼接为字符串
    return ''.join(li)
def create_files():
    # 随机生成多个文件名
    # 集合生成式
    li = {gen_code() for i in range(100)}
    os.mkdir('img')
    for name in li:
        os.mknod('img/' + name + '.png')
# create_files()
def modify_suffix(dirname, old_suffix, new_suffix):
    """
    :param dirname: 要操作的目录
    :param old_suffix: 之前的文件后缀名
    :param new_suffix: 新的文件的后缀名
    :return:
    """
    # 1.判断查找的目录是否存在,如果不存在,显示报错
    if os.path.exists(dirname):
        # 2.找出所有以old_suffix(.png)结尾的文件
        pngfiles = [filename for filename in os.listdir(dirname)
                    if filename.endswith(old_suffix)]
        # 3.将文件名和后缀名分开,留下所有的文件名
        basefiles = [os.path.splitext(filename)[0] for filename in pngfiles]
        print basefiles
        # 4.文件重命名
        for filename in basefiles:
            # 需要加上img目录名
            oldname = os.path.join(dirname, filename + old_suffix)
            newname = os.path.join(dirname, filename + new_suffix)
            os.rename(oldname, newname)
            print '%s重命名为%s成功' % (oldname, newname)
        else:
            print '%s 不存在,不能操作' % dirname
if __name__ == '__main__':
    # modify_suffix('img','.png','.jpg')
    # 如何在执行脚本时,接收用户传入的参数
    # 判断用户传入的参数是否为3个
    if len(sys.argv) == 4:
        dirname = sys.argv[1]
        old_suffix = sys.argv[2]
        new_suffix = sys.argv[3]
        modify_suffix(dirname,old_suffix,new_suffix)
    else:
        print 'Usage: %s dirname old_suffix new_suffix' %sys.argv[0]
 
  
  
  
  
  
  
  

猜你喜欢

转载自blog.csdn.net/qq_42711214/article/details/82746995