파이썬 파일 읽기 질문

네이쳐   
   조회 6004   추천 0    

 파이썬으로 스크립트를 짜보고 있는 초보인데요,

nvt_00 부터 nvt_90 까지의 폴더들 안에 포함된, pr_nvt_00.mdp ~ 90번까지의 파일들을

반복문 for를 이용해서 수정하려고, 아래와 같이 파일을 읽게 하려고 했는데

        open_file = open("nvt_%02d/pr_nvt_%02d.mdp" % (temp_set.index(temp_option), temp_set.index(temp_option)), "r")

빨간색 부분을 추가 하니까 안되네요ㅠ. 어떤 방법이 있는지 여쭈어봅니다.

짧은글 일수록 신중하게.
김제연 2017-01
ㅎㄸ ........파이썬 짧은 소스가 장점이긴 하지만.. 제가 초보라 그런지 무슨 코드인지 감도 안오네요.. ㅎㄷㄷ .
쉽게 반복문으로 돌려서 하세요...
     
네이쳐 2017-01
반복문으로 다했는데요...막히는 부분만 적어봤습니다.

 open_file = open("pr_nvt.mdp", "r") 이런식으로 파일 이름을 지정하면 되는데... 여러개를 처리해 보려고 위에 처럼 하니까 안되네요 ㅠ
김제연 2017-01
아 이제보니 %02에 값 넣어주는 소스군요 -_-;;

http://stackoverflow.com/questions/3484348/dynamic-filenames

참조해보세요 다양한 방법이 있네요... 저런 방법이 쉬우시면 맨 위에..

for x in range(22): #Remember that the range function returns integers up to 22-1
    exec "f%02d = open('file%02d.txt', 'w')" % (x, x)

요고 쓰시면 될것 같네요 .. 안쪽이 아닌 바깥쪽에다 넣는거네요..
     
네이쳐 2017-01
아 감사합니다~ 답변해주신 것을 참고로 공부해보겠습니다.

초보라서 며칠동안 겨우겨우 조금씩 하고 있습니다 ㅎㅎ
이건희 2017-01
네이쳐님 예전 글에도 덧글 달아드린 기억이 있네요~
일단 파이썬으로 파일을 읽으려면 os 모듈 사용법 간략하게 알아두셔야 합니다. 많이도 필요없고 자주쓰는것만...

이번 글에서는 문자열 포매팅을 잘못 하신 것 같습니다. 포매팅이 무엇인지는 아시죠?

지금 문맥이 이해가 안가는데 더 자세히 적어주실 수 있나요?
저기에 temp_set.index나 temp_option이 위에서 def하신건가...
     
네이쳐 2017-01
네네 감사합니다. ㅎㅎ
제가 작성해 놓은데 까지 입니다.

import os
import shutil


temp_set = (300.00, 301.66, 303.33, 305.01, 306.69, 308.38, 310.08, 311.79, 313.51, 315.24, 316.97,
318.71, 320.46, 322.22, 323.97, 325.75, 327.53, 329.32, 331.12, 332.93, 334.74, 336.57, 338.40, 340.24, 342.09,
343.95, 345.82, 347.69, 349.58, 351.47, 353.37, 355.28, 357.20, 359.13, 361.04, 362.98, 364.94, 366.90, 368.88,
370.86, 372.85, 374.85, 376.86, 378.88, 380.91, 382.94, 384.99, 387.05, 389.12, 391.19, 393.28, 395.38, 397.48,
399.60, 401.73, 403.86, 406.01, 408.15, 410.31, 412.49, 414.68, 416.87, 419.08, 421.30, 423.53, 425.76, 428.01,
430.27, 432.54, 434.82, 437.11, 439.41, 441.72, 444.05, 446.38, 448.73, 451.08, 453.45, 455.82, 458.21, 460.61,
463.02, 465.45, 467.88, 470.33, 472.78, 475.25, 477.73, 480.22, 482.73, 485.24, 487.77, 490.30, 492.85, 495.42,
497.99, 500.57)



def make_folder():
    for folder in temp_set:
        os.mkdir("nvt_%02d" % temp_set.index(folder))
    print("%02d folders have been created!" % temp_set.index(folder))


def copy_files():
    for mdp_file in temp_set:
        shutil.copy("pr_nvt.mdp", "nvt_%02d/pr_nvt_%02d.mdp" % (temp_set.index(mdp_file), temp_set.index(mdp_file)))
    print("%02d files have been copied to the folders!" % temp_set.index(mdp_file))


def edit_contents():
    for temp_option in temp_set:
        open_file = open("nvt_%02d/pr_nvt_%02d.mdp" % (temp_set.index(temp_option), temp_set.index(temp_option)), "r")
        read_file = open_file.read()
        edit_file = read_file.replace("300.00", "%.2f" % temp_option)
        re_open_file = open("nvt_%02d/pr_nvt_%02d.mdp" % (temp_set.index(temp_option), temp_set.index(temp_option), "w")
        save_file = re_open_file.write(edit_file)




if __name__ == "__main__":
    make_folder()
    copy_files()
    edit_contents()
     
네이쳐 2017-01
폴더만드는거랑 파일 복사해 넣기는 성공했는데,
내용수정하는데서 막혀있습니다.

따로 파일 수정하는거만 만들어서 테스트 할때,  open_file = open("pr_nvt.mdp", "r") 이렇게 파일 한개만 지정할 때는 되엇는데
여러개를 처리하려고 바꾸니까 막혔습니다.
감사합니다.
          
김제연 2017-01
r로 했는데 수정이 가능했다는 말씀이세요? 이상한데요 ..r이 read only 아닌가요 ..
아 .. 쓰고보니 .. 저런식으로 한개만 지정했다는 말씀이시군요 r은 의미 없고요 ..
               
네이쳐 2017-01
w로 여니까 내용이 다 지워져서요..
 r로 먼저 읽어들인 다음에 변경하고, 그다음 w로 여니까 전체 내용이 유지 되면서 필요한 부분만 바껴서 저장이 되길래
이렇게 해놨습니다.  초보라서 잘 모르겟어요 ㅠ ㅎㅎ


QnA
제목Page 2113/5728
2014-05   5257073   정은준1
2015-12   1781937   백메가
2011-02   7666   Larry
2017-03   5515   lovin09
2018-06   5763   스모모군
2015-02   4058   한효석
2016-04   8070   이해하면오…
2016-04   16110   장동건2014
2018-06   5831   e5472
2011-02   6495   원주멋진덩치
2017-03   3087   두포리
2019-08   3542   쌍cpu
2022-05   3757   만사오케이
2019-08   2316   Kimhero
2024-01   1573   용새
2011-03   5951   Larry
2018-07   3877   witbox
2013-10   6565   서울I김동수
2018-07   9701   의롭게살리라
2020-11   4073   그모도
2011-03   8578   무아
2015-02   4268   윈도우10