流暢的python學習-3

一、文件操作

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Apr 23 20:59:49 2020

@author: root
"""


import os
import fnmatch


# example
for f_name in os.listdir('/tmp/some_directory'):
    if fnmatch.fnmatch(f_name, '*.txt'):
       print (f_name)
       
       
# 例如,在UNIX shell中使用 mv *.py python_files 移动所有 .py 扩展名 的文件
# 从当前目录到 python_files 。这 * 是一个通配符表示任意数量的字符,*.py 
# 是一个全模式。Windows操作系统中不提供此shell功能。
# 但 glob 模块在Python中添加了此功能,使得Windows程序可以使用这个特性。
# 这里有一个使用 glob 模块在当前目录下查询所有Python代码文   

import glob
print (glob.glob('*.py'))  


for name in glob.glob('*[0-9]*.txt'):
    print (name)
    
    
    
import os
# data_file = '/tmp/some_directory/demo1.txt' 
# if os.path.is_file(data_file):
#    os.remove(data_file)
# else:
#     print (f'Error: {data_file} not a valid filename')
    
    
    
# f = open('/tmp/some_directory/demo1.txt','rb+')
# print(f.read()) ##直接打印出来
# print(f.readline()) ##打印第一行 
# print(f.readlines()) 
# print(f.readline(),end='')
# print(f.readlines(),end='')
# print([line.strip() for line in f.readlines()])
# f.write('python 8888888888')
# f.close()









import string
import random
def create_mac():
    mac='01-AF-3B'
    for i in range(3):
        n=random.sample(string.hexdigits,2)
        sn='-'+''.join(n).upper()
        mac+=sn
    return mac    


with open('	mpsome_directorydemo9.txt','w+') as f:
    for i in range(100):
        mac=create_mac()
        print (mac)
        f.write(mac+'
')
    f.close()
        
        

with open('	mpsome_directorydemo9.txt') as f:        
#使用这种文件的打开方式更加简单了,同时可以避免忘记关闭文件的情况
    print('9999999999999999',f.read())

在现代Python版本中,可以使用 os.scandir() 和 pathlib.Path 来替代 os.listdir() 。

os.scandir() 在Python 3.5 中被引用,其文档为 PEP 471 。

os.scandir() 调用时返回一个迭代器而不是一个列表。

import os
entries = os.scandir('my_directory')
print(entries)



ScandirIterator 指向了当前目录中的所有条目。你可以遍历迭代器的内容,并打印文件名。

import os
with os.scandir('my_directory') as entries:
    for entry in entries:
        print(entry.name)

案例:

第一步:在本機的 /tmp/some_directory/  目錄下建 test1.txt  、 test2.txt

 代碼:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Apr 24 23:13:49 2020

@author: root
有两个文件,每个都有很多行ip地址,求出两个文件中相同的ip地址
要点就是:(1)用with (2)处理行末的'
' (3)使用二分查找提高算法效率。(4)使用set快速去重。
"""

import bisect
b= open('/tmp/some_directory/demo9.txt', 'w')
with open('/tmp/some_directory/test1.txt','r') as f1:
     list1=f1.readlines()
     print (list1)
     for i in range(len(list1)):
         list1[i]=list1[i].strip('
')
         
         
with open('/tmp/some_directory/test2.txt','r') as f2:
     list2=f2.readlines()
     print (list2)
     for i in range(len(list2)):
         list2[i]=list2[i].strip('
') 
         
list2.sort()
l_2=len(list2)
same_data=[]
for i in list1:
    pos = bisect.bisect_left(list2, i)   
    if pos<len(list2) and list2[pos]==i:
       same_data.append(i) 
       b.write(i+'
')
       same_data=list(set(same_data))
print (same_data)
         
原文地址:https://www.cnblogs.com/1314520xh/p/12765074.html