-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path5.1.py
More file actions
125 lines (114 loc) · 4.46 KB
/
5.1.py
File metadata and controls
125 lines (114 loc) · 4.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import locale
locale.setlocale(locale.LC_ALL, "")
import datetime
import optparse
import os
import csv
csvFile = open('information_about_files.csv', 'w')
csvWriter = csv.writer(csvFile, delimiter='\t')
def main():
counts = [0, 0]
opts, paths = process_options()
if not opts.recursive:
filenames = []
dirnames = []
for path in paths:
if os.path.isfile(path):
filenames.append(path)
continue
for name in os.listdir(path):
if not opts.hidden and name.startswith("."):
continue
fullname = os.path.join(path, name)
if fullname.startswith("./"):
fullname = fullname[2:]
if os.path.isfile(fullname):
filenames.append(fullname)
else:
dirnames.append(fullname)
counts[0] += len(filenames)
counts[1] += len(dirnames)
process_lists(opts, filenames, dirnames)
else:
for path in paths:
for root, dirs, files in os.walk(path):
if not opts.hidden:
dirs[:] = [dir for dir in dirs
if not dir.startswith(".")]
filenames = []
for name in files:
if not opts.hidden and name.startswith("."):
continue
fullname = os.path.join(root, name)
if fullname.startswith("./"):
fullname = fullname[2:]
filenames.append(fullname)
counts[0] += len(filenames)
counts[1] += len(dirs)
process_lists(opts, filenames, [])
csvWriter.writerow(["{0} file{1}, {2} director{3}".format(
"{0:n}".format(counts[0]) if counts[0] else "no",
"s" if counts[0] != 1 else "",
"{0:n}".format(counts[1]) if counts[1] else "no",
"ies" if counts[1] != 1 else "y")])
def process_lists(opts, filenames, dirnames):
keys_lines = []
for name in filenames:
modified = ""
if opts.modified:
try:
modified = (datetime.datetime.fromtimestamp(
os.path.getmtime(name))
.isoformat(" ")[:19] + " ")
except EnvironmentError:
modified = "{0:>19} ".format("unknown")
size = ""
if opts.sizes:
try:
size = "{0:>15n} ".format(os.path.getsize(name))
except EnvironmentError:
size = "{0:>15} ".format("unknown")
if os.path.islink(name):
name += " -> " + os.path.realpath(name)
if opts.order in {"m", "modified"}:
orderkey = modified
elif opts.order in {"s", "size"}:
orderkey = size
else:
orderkey = name
keys_lines.append((orderkey, "{modified}{size}{name}".format(
**locals())))
size = "" if not opts.sizes else " " * 15
modified = "" if not opts.modified else " " * 20
for name in sorted(dirnames):
keys_lines.append((name, modified + size + name + "/"))
for key, line in sorted(keys_lines):
csvWriter.writerow([line])
def process_options():
usage = """%prog [options] [path1 [path2 [... pathN]]]
The paths are optional; if not given . is used."""
parser = optparse.OptionParser(usage=usage)
parser.add_option("-H", "--hidden", dest="hidden",
action="store_true",
help=("show hidden files [default: off]"))
parser.add_option("-m", "--modified", dest="modified",
action="store_true",
help=("show last modified date/time [default: off]"))
orderlist = ["name", "n", "modified", "m", "size", "s"]
parser.add_option("-o", "--order", dest="order",
choices=orderlist,
help=("order by ({0}) [default: %default]".format(
", ".join(["'" + x + "'" for x in orderlist]))))
parser.add_option("-r", "--recursive", dest="recursive",
action="store_true",
help=("recurse into subdirectories [default: off]"))
parser.add_option("-s", "--sizes", dest="sizes",
action="store_true",
help=("show sizes [default: off]"))
parser.set_defaults(order=orderlist[0])
opts, args = parser.parse_args()
if not args:
args = ["."]
return opts, args
main()
csvFile.close()