2017-07-21 19 views
0

AIM:ファイルのすべてをさまざまなハードディスクに記録し、ファイル名、フォルダ、およびファイルのサイズをメガバイト単位で収集したいとします。コードが実行され、私の知る限り、エラーは発生しませんが、最後にcsvファイルが生成されませんか? を私はPythonが標準ユーザーのためとはsudoユーザのために同じ場所にあることを確認し、chmodの+ xはパーミッションを変更、須藤を持つファイルを実行しようとした、そして最後に削除しました:私が試した何pythonコードでcsvファイルが生成されない

OSによって異なる結果やエラーが発生するような厄介な行をコメントアウトすることができます。そのまま

import os 
from os import path 
import sys 
import datetime 
from datetime import date, time, timedelta 
import time 
import csv 
#from socket import gethostbyname 

#variables 
#hostname = str(socket.gethostname()) 
scandir = "/" 
savefiledir = "/Users/joshua/Documents/python/" 
textfilename = str(datetime.datetime.now().strftime("%Y-%m-%d")) + "_" "directory_printer.csv" 

#change directory to the root directory or the one which you want to scan for files (scandir) 
os.getcwd() 
os.chdir(scandir) 
directory = os.getcwd() 

#find all files in a directory and it's sub directory regardless of extension 
results = [val for sublist in [[os.path.join(i[0], j) for j in i[2]] for i in os.walk(directory)] for val in sublist] 

d = {} 
file_count = 0 
metadata = [] 

for file in results: 
    #full path 
    try: 
     fullpath = file 
    except: 
     fullpath = None 

    #file name 
    try: 
     file_directory = "/".join(str(file).split('/')[1:-1]) 
    except: 
     file_directory = None 

    #file extension 
    try: 
     file_ext = str(file).split('/')[-1] 
    except: 
     file_ext = None 

    #subfolders 
    try: 
     parts = file_directory.split('/') 
     sub_folders = ":".join(parts[1:-1]) 
    except: 
     sub_folders = None 

    #num subfolders 
    try: 
     count_subfolders = len(sub_folders.split(':')) 
    except: 
     count_subfolders = None 

    #filesize megabytes 
    try: 
     filesize_mb = os.path.getsize(file)/1024 
    except: 
     filesize_mb = None 

    #date modified 
    try: 
     date_modified = datetime.datetime.now() - datetime.datetime.fromtimestamp(path.getmtime(file)) 
    except: 
     date_modified = None 

    #time modified 
    #try: 
#  time_modified = os.stat(fullpath).st_mtime #time of most recent content modification 
    #except: 
#  time_modified = None 


    #time created (windows) 
# try: 
#  time_created = os.stat(fullpath).st_ctime #platform dependent; time of most recent metadata change on Unix, or the time of creation on Windows)# except: 
#  time_created = None 

    #record all file metadata 
    d[file_count] = {'Full_Path': fullpath, 'File_Directory': file_directory, 
        'File_Extension': file_ext, 'List_Sub_Folders' : sub_folders, 
        'Count_Sub_Folders' : count_subfolders, 'Filesize_mb' : filesize_mb, 
        'Date_Modified' : date_modified} 

    file_count = file_count + 1 

#write the dictinary with the disks file metadata to a csv file 
with open(textfilename,'w') as f: 
    w = csv.writer(f) 
    w.writerows(d.items()) 

print("Scanning directory: " 
     + str(scandir) + " complete!" + "\n" 
     + "The results have been saved to: " + "\n" 
     + str(savefiledir)+str(textfilename)) 
+1

おそらくない問題はなく、インスタンスのために、 'results'が空でないことを確認してください:あなたが行う必要があります(最終的に印刷されたメッセージは、それが保存されますと言う)適切な場所にあるファイルを取得したい場合forループの前に 'print(len(results))'を書いてください。より一般的には、デバッグコードを挿入して、何が起こっているかを確認してください。 – bli

+1

トラブルシューティングの観点から、ディスクに何か書き込めますか?open(textfilename、 'w')with f: w = csv.writer(f) w.write( 'some random text') これらの3行はディスク? いいえ、問題はディスクに書き込んでいます はいの場合、問題はあなたのコードです>>>多分d.items()が空であるなど –

+0

@ E.Decatemeユーザのコードjdehesaが問題を修正しました。私は別のディレクトリに最終的なcsvを書いていました。 – yoshiserry

答えて

1

は、それはあなたのコードが原因であなたがos.chdir(scandir)を呼び出すプログラムの先頭で、savefiledirにない、scandir/)へのCSVファイルを作成しますように見えます。

# ... 
#write the dictinary with the disks file metadata to a csv file 
with open(savefiledir + textfilename,'w') as f: 
    w = csv.writer(f) 
    w.writerows(d.items()) 
# ... 
関連する問題