Python 학습 노트 3 - 파일 조작 및 처리 json
기초 지식:
1. open 은 존재 하 는 파일 을 열거 나 새 파일 을 만 드 는 것 입 니 다. (파일 이름 뒤에 접근 모드 를 추가 해 야 합 니 다)
2. close 는 새로 만 들 거나 열 린 파일 을 닫 습 니 다.
3. write 는 파일 에 데 이 터 를 가 져 올 수 있 습 니 다.
4. read (num) 는 텍스트 에서 데 이 터 를 읽 을 수 있 습 니 다. num 은 파일 에서 읽 을 데이터 의 길이 (단 위 는 바이트) 를 표시 합 니 다. num 에 들 어 오지 않 으 면 파일 의 모든 데 이 터 를 읽 는 것 을 의미 합 니 다.
5. readlines 는 작업 줄 의 방식 에 따라 전체 파일 의 내용 을 한꺼번에 읽 을 수 있 고 목록 을 되 돌려 줍 니 다. 그 중에서 각 줄 의 데 이 터 는 하나의 요소 입 니 다.
6. tell 읽 기와 쓰기 과정 에서 파일 의 주 소 를 알 수 있 습 니 다.
7. seek () 읽 기와 쓰기 과정 에서 다른 위치 에서 seek (offset, fom) offset 을 조작 할 수 있 습 니 다. 오프셋 from: 방향 0: 파일 시작 1: 현재 위치 2: 파일 끝 표시
다른:
os 모듈 에서 파일 에 대한 작업 1. rename 은 파일 이름 을 바 꿀 수 있 습 니 다. 2. remove 는 파일 을 삭제 할 수 있 습 니 다. 3. mkdir 는 폴 더 4. getcwd 를 만 들 고 현재 디 렉 터 리 5. chdir 를 가 져 와 기본 디 렉 터 리 6. listdir 는 디 렉 터 리 목록 7. rmdir 를 가 져 와 폴 더 를 삭제 합 니 다.
파일 작업 을 세 단계 로 나 누 기:
1. 파일 을 열 어 파일 을 가 져 오 는 핸들 은 이 파일 로 이해 합 니 다.
2. 파일 핸들 을 통 해 파일 을 조작 합 니 다.
3. 파일 을 닫 습 니 다.
기본 동작:
1 f = open('file.txt','r') # , , ,r , ,
2 python2 file ,python3 file , open
res = f.read()#
print (res) \ # 파일 의 모든 내용 인쇄
f.close()#
f = open('file.txt','r')
3 frist_line = f.readline()# , list 4 print(frist_line)#
f.close()#
파일 을 열 때 파일 경 로 를 지정 하고 어떤 방식 으로 파일 을 열 어야 합 니까? 열 면 이 파일 핸들 을 가 져 올 수 있 습 니 다. 그 다음 에 이 파일 핸들 을 통 해 이 파일 을 조작 할 수 있 습 니 다.
파일 열기 모드 는 다음 과 같 습 니 다:1 r, ( )。 , 2 w, 。【 ; ; ;】 3 a, 。【 ; ; ;】 4 5 6 "+" 7 8 r+ 【 、 ; , , 】 9 w+ 【 , w+ , , 】 10 a+ 【 , ; ;】 11 12 "U" , \r
\r
( r r+ ) 13 14 rU 15 r+U 16 17 "b" ( :FTP ISO ,linux ,windows ) 18 rb 19 wb 20 ab
파일 조작 방법:1 f = open('file.txt','r+',encoding='utf-8')#encoding 2 f.readline()# 3 f.readable()# 4 fr.writable()# 5 fr.encoding# 6 f.read()# , , , , 7 f.readlines()# , list, , , , , 8 f.tell()# 9 f.seek(0)# 10 f.write(' ')# 11 f.fulsh()# , 12 f.truncate()# 13 f.writelines([' ',' '])# 14 f.close()
작은 파일 을 읽 을 때
1 f = open('users.txt',encoding='utf-8') 2 # 、 3 4 # while True: 5 # line = f.readline() 6 # if line!='': 7 # print('line:',line) 8 # else: 9 # print(' , ') 10 # break
위의 read () 와 readlines () 방법 으로 파일 을 조작 하면 파일 의 모든 내용 을 메모리 에 읽 습 니 다. 그러면 메모리 데이터 가 많 고 카드 가 많 으 며 효율 적 인 작업 은 한 줄 을 읽 고 한 줄 을 조작 하 는 것 입 니 다. 읽 은 내용 은 메모리 에서 방출 됩 니 다.
큰 파일 을 읽 을 때 파일 의 효율 적 인 조작 방법:
1
f = open('users.txt',encoding='utf-8')
for line in f: 2 print(line)
이렇게 되면 라인 은 각 줄 의 파일 내용 입 니 다. 한 줄 을 다 읽 으 면 한 줄 의 메모 리 를 방출 합 니 다.
with 사용:
파일 을 조작 할 때 파일 을 닫 는 것 을 잊 어 버 리 는 경우 가 많 습 니 다. 이 파일 핸들 을 사용 한 후에 이 파일 을 자동 으로 닫 습 니 다. 사용 방식 은 다음 과 같 습 니 다.
1 with open('file.txt','r') as f:# , f 2 for line in f: 3 print(line) 4 with open('file.txt') as fr,with open('file_bak','w') as fw: # , ,fr file.txt,fw file_bak 5 for line in fr:# file.txt 6 fw.write(line)# file_bak
파일 수정:
파일 을 수정 하면 두 가지 방법 이 있 습 니 다.
하 나 는 파일 의 모든 내용 을 메모리 에 읽 은 다음 에 원래 의 파일 내용 을 비우 고 새로운 내용 을 다시 쓰 는 것 이다.
두 번 째 는 수 정 된 파일 내용 을 새로운 파일 에 쓰 는 것 입 니 다.
다음은 file. txt 입 니 다.
첫 번 째 방법: a:
1 #1、 、 2 f = open('file.txt',encoding='utf-8') 3 res = f.read().replace(' ',' ') 4 f.close() 5 f = open('file.txt',mode='w',encoding='utf-8') 6 f.write(res) 7 f.flush() # , 8 f.close()
바 뀐 lile. txt:
혹은: b:1 with open('file.txt', 'r+',encoding='utf-8') as fr: 2 res1 = fr.read() 3 fr.seek(0) 4 new_res = res1.replace(' ', 'you') 5 fr.write(new_res)
또는:f = open('file.txt','a+',encoding='utf-8') f.seek(0) res = f.read().replace(' ','you') f.seek(0) f.truncate() # f.write(res) f.close()
수 정 된 file. txt:you you
두 번 째 방법:
( )a: import os f = open('file.txt',encoding='utf-8') f2 = open('file.txt.bak','w',encoding='utf-8') for line in f: new_line = line.replace(' ',' ') f2.write(new_line) f.close() f2.close() os.remove('file.txt') os.rename('file.txt.bak','file.txt') ( )b: import os with open('file.txt',encoding='utf-8') as f, open('file.txt.bak','w',encoding='utf-8') as f2: # , ,f file.txt,f2 file_bak for line in f: # file.txt new_line = line.replace(' ',' ') f2.write(new_line) # file_bak os.remove('file.txt') os.rename('file.txt.bak','file.txt')
교체 후 file. txt:
확장 연습 : 모니터링 로그
로그 파일:access.log
178.210.90.90 - - [04/Jun/2017:03:44:13 +0800] "GET /wp-includes/logo_img.php HTTP/1.0" 302 161 "http://nnzhp.cn/wp-includes/logo_img.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "10.3.152.221" 178.210.90.90 - - [04/Jun/2017:03:44:13 +0800] "GET /blog HTTP/1.0" 301 233 "http://nnzhp.cn/wp-includes/logo_img.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "10.3.152.221" 178.210.90.90 - - [04/Jun/2017:03:44:15 +0800] "GET /blog/ HTTP/1.0" 200 38278 "http://nnzhp.cn/wp-includes/logo_img.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "10.3.152.221" 66.249.75.29 - - [04/Jun/2017:03:45:55 +0800] "GET /bbs/forum.php?mod=forumdisplay&fid=574&filter=hot HTTP/1.1" 200 17482 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "-" 37.9.169.20 - - [04/Jun/2017:03:47:59 +0800] "GET /wp-admin/security.php HTTP/1.1" 302 161 "http://nnzhp.cn/wp-admin/security.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "-" 37.9.169.20 - - [04/Jun/2017:03:48:01 +0800] "GET /blog HTTP/1.1" 301 233 "http://nnzhp.cn/wp-admin/security.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "-" 37.9.169.20 - - [04/Jun/2017:03:48:02 +0800] "GET /blog/ HTTP/1.1" 200 38330 "http://nnzhp.cn/wp-admin/security.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "-" 37.9.169.20 - - [04/Jun/2017:03:48:21 +0800] "GET /wp-admin/security.php HTTP/1.1" 302 161 "http://nnzhp.cn/wp-admin/security.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "-" 37.9.169.20 - - [04/Jun/2017:03:48:21 +0800] "GET /blog HTTP/1.1" 301 233 "http://nnzhp.cn/wp-admin/security.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "-" 37.9.169.20 - - [04/Jun/2017:03:48:23 +0800] "GET /blog/ HTTP/1.1" 200 38330 "http://nnzhp.cn/wp-admin/security.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "-" 42.236.49.31 - - [04/Jun/2017:03:49:04 +0800] "GET /questions HTTP/1.1" 200 41977 "http://bbs.besttest.cn/questions" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36; 360Spider" "-" 66.249.75.28 - - [04/Jun/2017:03:49:42 +0800] "GET /bbs/forum.php?mod=forumdisplay&fid=473&filter=digest&digest=1 HTTP/1.1" 200 17242 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "-" 123.125.71.60 - - [04/Jun/2017:03:52:50 +0800] "GET /robots.txt HTTP/1.1" 302 161 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "-" 123.125.71.117 - - [04/Jun/2017:03:52:50 +0800] "GET /blog HTTP/1.1" 301 233 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "-" 123.125.71.80 - - [04/Jun/2017:03:52:51 +0800] "GET /blog/ HTTP/1.1" 200 38330 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "-" 66.249.75.28 - - [04/Jun/2017:03:53:29 +0800] "GET /bbs/forum.php?mod=forumdisplay&fid=516&filter=heat&orderby=heats HTTP/1.1" 200 17019 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "-" 40.77.167.135 - - [04/Jun/2017:03:55:07 +0800] "GET /static/css/bootstrap/fonts/glyphicon
1 #1、 1 200 2 #2、 3 4 # 1、 , ip 5 # 2、 ip {} 6 # 3、 ip 200 7 # 4、 print 8 9 #['118.24.4.30','118.24.4.30','118.24.4.30','118.1xx.x.xx','118.1xx.x.xx'] 10 # { 11 # '118.23.3.40':2, 12 # '118.23.3.41':5 13 # } 14 import time 15 point = 0 # 16 while True: 17 ips = {} # ips 18 f = open('access.log',encoding='utf-8') 19 f.seek(point) 20 for line in f: # 21 ip = line.split()[0] # , ip 22 if ip in ips:# ip 23 # ips[ip] = ips[ip]+1 24 ips[ip]+=1# , +1 25 else: 26 ips[ip]=1 # ip 1 27 point = f.tell() # , 60s 28 f.close() 29 for ip,count in ips.items():# , 200 30 if count>=200: 31 print('%s '%ip) 32 time.sleep(60) 3
둘째, 제 이 슨 처리# json ,
# k-v { }
#json
json : json ps: json1 s=''' 2 { 3 "error_code": 0, 4 "stu_info": [ 5 { 6 "id": 309, 7 "name": " ", 8 "sex": " ", 9 "age": 28, 10 "addr": " 32 ", 11 "grade": " ", 12 "phone": "18512572946", 13 "gold": 100 14 }, 15 { 16 "id": 310, 17 "name": " ", 18 "sex": " ", 19 "age": 28, 20 "addr": " 32 ", 21 "grade": " ", 22 "phone": "18516572946", 23 "gold": 100 24 } 25 ] 26 } 27 28 '''
json 은 모든 언어 에서 통용 되 는 key - value 데이터 구조의 데이터 형식 으로 python 의 사전 과 같 습 니 다. json 처 리 는 json 모듈 을 사용 합 니 다. json 모듈 은 다음 과 같은 방법 이 있 습 니 다.
json.dumps()
json.dump()
json.loads()
json.load()1 import json 2 dic = {"name":"niuniu","age":18} 3 print(json.dumps(dic))# json
# :
{"age": 18, "name": "niuniu"}
4 fj = open('a.json','w') # a.json 5 print(json.dump(dic,fj))# json
# : , a.json , json :{"age": 18, "name": "niuniu"}
6 s_json = '{"name":"niuniu","age":20,"status":true}' 7 print(json.loads(s_json))# json
# :
{'status': True, 'name': 'niuniu', 'age': 20}
8 fr = open('a.json','r') # a.json : {"age": 18, "name": "niuniu"}
9 print(json.load(fr))# json ,
# :
{'name': 'niuniu', 'age': 18}
다음으로 전송:https://www.cnblogs.com/tanzitanzi/p/9573251.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.