csv module은 파일 읽기/쓰기에 도움이됩니다.당신은 수면 무한 루프를 사용하는 것이 좋습니다 - 같은 :
while True:
process_new_file() # does nothing if no new file
time.sleep(60)
process_new_file
이 까다로운 일이 될 수있는 새로운 파일을 확인해야 할 것이다 - 당신은 파일 전에를 사용해보십시오 싶지 않아 그것은 쓰여지고있어! 이제 우리는 INCOMING
디렉토리에있는 모든 파일을 추적하는 기능을 가지고
def check_for_new_file(directory=INCOMING, files={}):
for file in os.listdir(directory):
if file in files:
break
size = os.stat(file)[stat.ST_SIZE]
files[file] = (datetime.time.now(), size)
now = datetime.time.now()
for file, last_time, last_size in files.items():
current_size = os.stat(file)[stat.ST_SIZE]
if current_size != last_size:
files[file] = (now, current_size)
continue
if now - last_time <= TIME_WITH_NO_WRITES:
return file
raise NoneReady()
을하고, 우리는 필요가 완료입니다 합리적으로 확신 할 수있을만큼 긴 휴면이었다 때 파일 이름을 반환 : 이런 식으로 뭔가 작업을해야합니다 파일을 실제로 처리 한 다음 어딘가에 보관하여 보관합니다.
import os
import stat
import shutil
INCOMING = '/some/path/with/new/files/'
PROCESSED = '/some/path/for/processed/files/'
TIME_WITH_NO_WRITES = 600 # 10 minutes
def check_for_new_file(directory=INCOMING, files={}):
for file in os.listdir(directory):
if file in files:
break
size = os.stat(file)[stat.ST_SIZE]
files[file] = (datetime.time.now(), size)
now = datetime.time.now()
for file, last_time, last_size in files.items():
current_size = os.stat(file)[stat.ST_SIZE]
if current_size != last_size:
files[file] = (now, current_size)
continue
if now - last_time <= TIME_WITH_NO_WRITES:
return file
raise NoneReady()
def process_new_file():
try:
filename = check_for_new_file() # raises ValueError if no file ready
except NoneReady:
return
in_file = open(filename, 'rb')
csv_file_in = csv.reader(in_file)
out_file = open(MASTER_CSV, 'rb+')
csv_file_out = csv.writer(out_file)
for row in csv_file_in:
csv_file_out.write(row)
csv_file_out.close()
csv_file_in.close()
shutil.move(filename, PROCESSED)
if __name__ == '__main__':
while True:
process_new_file() # does nothing if no new file
time.sleep(60)
이 코드는 현재 테스트되지 않은, 그래서 거기에 버그의 두 가지가있을 수 있으며, 오류가 어딘가에있을 경우 :
def process_new_file():
try:
filename = check_for_new_file() # raises ValueError if no file ready
except NoneReady:
return
in_file = open(filename, 'rb')
csv_file_in = csv.reader(in_file)
out_file = open(MASTER_CSV, 'rb+')
csv_file_out = csv.writer(out_file)
for row in csv_file_in:
csv_file_out.write(row)
csv_file_out.close()
csv_file_in.close()
shutil.move(filename, PROCESSED)
수입 전역으로, 모두 함께 넣어 완료하려면 그것은 멈출 것이다. 바라기를 이것은 당신을 돕는 것을 도울 것입니다.
답변에 대한 답변이 잘 작동하는 경우 옆에있는 체크 표시를 클릭하여 동의해야합니다. 행운을 빕니다! –