2013-11-28 4 views
1

4 개의 텍스트 파일이 들어있는 폴더가 있습니다. 내 폴더에있는 파일의 크기를 확인하고 동일한 크기의 파일 만 열 수있는 코드를 프로그램하고 싶습니다. 누구든지 어떤 생각을 가지고 있습니까?python으로 디렉토리에있는 파일의 크기를 확인하는 방법은 무엇입니까?

이미이

import os 


d=os.stat('H:/My Documents/211').st_size 
+0

그것은 당신이 뭔가를 시도한 것이 좋다. 아마도 그것은 당신이 원하는 것을하지 않았을 것입니다. 그것은 무엇을 했는가? 너는 무엇을 기대 했는가? – babbageclunk

+0

인쇄 결과 d가 0으로 표시됩니다. 나는 파일의 크기를 비교하고 동일한 크기를 가진 파일을 열어보고 싶습니다. – UserYmY

답변

2

에있는 모든 파일의 크기를 인쇄합니다.

>>> import os 
>>> basedir = 'tmp/example' 
>>> names = os.listdir(basedir) 
>>> names 
['a', 'b', 'c'] 

그런 다음 당신은 이름에에 basedir을 추가해야

>>> paths = [os.path.join(basedir, name) for name in names] 
>>> paths 
['tmp/example/a', 'tmp/example/b', 'tmp/example/c'] 

그런 다음 당신은 os.stat (경로)를 사용하여 (이름, 크기)의 쌍의 목록으로 그것을 켤 수 있습니다. st_size (내가 만든 예제 파일이 비어) : 다음

>>> sizes = [(path, os.stat(path).st_size) for path in paths] 
>>> sizes 
[('tmp/example/a', 0), ('tmp/example/b', 0), ('tmp/example/c', 0)] 

그룹화 할 수 있습니다 함께 collections.defaultdict 사용하여 동일한 크기의 경로 :

>>> import collections 
>>> grouped = collections.defaultdict(list) 
>>> for path, size in sizes: 
...  grouped[size].append(path) 
... 
>>> grouped 
defaultdict(<type 'list'>, {0: ['tmp/example/a', 'tmp/example/b', 'tmp/example/c']}) 

이제 당신은 크기에 따라 모든 파일을 얻는다면, 그들 모두를 열 수 있습니다 (이후를 종료하는 것을 잊지 마세요!) :

>>> open_files = [open(path) for path in grouped[0]] 
+0

도움 주셔서 감사합니다. 그룹화 된 항목을 목록에 넣고 CSV 파일에 기록하면 나중에 사용할 수 있습니다. – UserYmY

+0

CSV 파일에서 원하는 내용에 따라 다릅니다. 크기가있는 행, filename1, filename2, filename3? – babbageclunk

4

내가 당신의 오류를 재현 할 수없는 노력했다. 난 당신이 제공하는 파일 이름이 잘못 같은데요

359415 
359415 

import os 
print os.path.getsize('mydata.csv') 
print os.stat('mydata.csv').st_size 

을 얻을 수 있습니다. 이것은 당신이 os.listdir를 사용할 수있는 디렉토리에있는 모든 파일을 보려면 폴더

my_dir = r'path/to/subdir/' 

for f in os.listdir(my_dir): 
    path = os.path.join(my_dir, f) 
    if os.path.isfile(path): 
     print os.path.getsize(path) 
+0

두 번째로 저에게 감사드립니다. 그리고 동일한 크기의 파일을 열 수 있도록 어떻게 코딩 할 수 있는지 알고 있습니까? – UserYmY

관련 문제