Python 학습 노트 3 - 파일 조작 및 처리 json

43152 단어
파일 작업 
기초 지식:
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: json
 1 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

좋은 웹페이지 즐겨찾기