流暢的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('\tmp\some_directory\demo9.txt','w+') as f: for i in range(100): mac=create_mac() print (mac) f.write(mac+'\n') f.close() with open('\tmp\some_directory\demo9.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)处理行末的'\n' (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('\n') 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('\n') 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+'\n') same_data=list(set(same_data)) print (same_data)
心有猛虎,细嗅蔷薇