рдХрд┐рд╕реА рддрд░рд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдСрдЯреЛ-рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдЪреВрдВрдХрд┐ рдЗрд╕рдиреЗ рдШрд░реЗрд▓реВ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП .Net рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдпрд╣ рдЖрдпрд░рдирдкрд╛рдпрдереЙрди рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрд╕реА рд╕рдордп, рд╕реА # рдХрд╛ рдЪрдпрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЬрдЧрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдореИрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд░рд╛рд╣рдд рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдпрд╣ рд╕рд░рд▓ рдкреНрд░рддреАрдд рд╣реЛрдЧрд╛ред рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП md5 рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рдлреЙрд░реНрдо "рд░рд┐рд╢реНрддреЗрджрд╛рд░ рдкрде" рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ: "md5" рдФрд░ рд╡рд┐рддрд░рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ nginx рд╕реНрдЯреЗрдЯрд┐рдХреНрд╕ рдЕрдкрд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд▓реЗрддрд╛ рд╣реИ, рдПрдХ рд╕рдорд╛рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рдорд╛рдирдХ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдо рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рддрдм рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╡рд┐рд╡рд░рдг рд╕рд╛рдордиреЗ рдЖрдпрд╛ рдерд╛ред рдЖрдпрд░рдирдкрд╛рдЗрдерди рдореЗрдВ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдИ рдмрд╛рд░ рдзреАрдореА рд╣реБрдИред рдФрд░ рдпрд╣ рдХрд╛рдлреА рддреЗрдЬ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрд╣реБрдд рдХрдордЬреЛрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрдиреБрдХреВрд▓рди рд╢реБрд░реВ рд╣реБрдЖ, рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ CPython рдФрд░ IronPython рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖред рд▓реЗрдЦ, рдХреНрд░рдорд╢рдГ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ: CPython, IronPython, рдФрд░ IronPython рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдХреВрд▓рд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рдеред
рдХрдЯреМрддреА рдХреЗ рддрд╣рдд рдкрд░рд┐рдгрд╛рдоред
рд╡рд┐рдиреНрдпрд╛рд╕
- рдХреЛрд░ i5 650 3.20 рдЧреАрдЧрд╛рд╣рд░реНрдЯреНрдЬрд╝
- 8 рдЬреАрдмреА рд░реИрдо
- рд╡рд┐рдВрдбреЛрдЬ 7 рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ x64
- рдкрд╛рдпрдерди 2.7.1
- рдЖрдпрд░рдирдкреАрдереЙрди 2.7.3
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП "рднреЛрдЬрди" рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдореЗрдВ рдЖрдпрд░рдирдкреАрдереЙрди рдХрд╛ рд░рдирдЯрд╛рдЗрдо, рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдЕрдиреНрдп рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рд╕реЗ рддреАрди рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рддрдХ рдХреА рдХреБрд▓ рд▓рдЧрднрдЧ 350 рдлрд╛рдЗрд▓реЗрдВред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб:
1| import os 2| import hashlib 3| 4| def getMD5sum(fileName): 5| m = hashlib.md5() 6| fd = open(fileName, 'rb') 7| b = fd.read() 8| m.update(b) 9| fd.close() 10| return m.hexdigest() 11| 12| output = '' 13| rootpath = 'app' 14| 15| for dirname, dirnames, filenames in os.walk(rootpath): 16| for filename in filenames: 17| fname = os.path.join(dirname, filename).replace('\\', '/') 18| md5sum = getMD5sum(fname) 19| output+='{0}:{1}\n'.format(fname.replace(rootpath, ''), md5sum) 20| 21| f = open('./checksums.csv', 'w') 22| f.write(output) 23| f.close()
рдЖрдпрд░рдирдкрд╛рдЗрдерди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдПрдХ рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
1| import os 2| import System.IO 3| from System.Security.Cryptography import MD5CryptoServiceProvider 4| 5| def getMD5sum(fileName): 6| b = System.IO.File.ReadAllBytes(fileName) 7| md5 = MD5CryptoServiceProvider() 8| hash = md5.ComputeHash(b) 9| result = '' 10| for b in hash: 11| result += b.ToString("x2") 12| return result 13| 14| output = '' 15| rootpath = 'app' 16| 17| for dirname, dirnames, filenames in os.walk(rootpath): 18| for filename in filenames: 19| fname = os.path.join(dirname, filename).replace('\\', '/') 20| md5sum = getMD5sum(fname) 21| output += fname.replace(rootpath, '', 1) + ':' + md5sum + '\n' 21| 22| System.IO.File.WriteAllText('checksums.csv', output)
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдкреВрд░рд╛ рдЕрдиреБрдХреВрд▓рди рдЗрд╕ рддрдереНрдп рдкрд░ рдЙрддрд░рддрд╛ рд╣реИ рдХрд┐ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рдирд╛ / рд▓рд┐рдЦрдирд╛ рдФрд░ рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдСрдирдиреЗрдЯ рдкрд░ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ ipy рд╕реНрд╡рдпрдВ c # рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ "рдмреИрдЯрд░реА" рдХреЗрд╡рд▓ .Net рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╣реИред рдЗрд╕ рдЕрд░реНрде рдореЗрдВ, рдореБрдЦреНрдп рдФрд░ 21 рд╡реАрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХреА 19 рд╡реАрдВ рдкрдВрдХреНрддрд┐ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:
19| output += '{0}:{1}\n'.format(fname.replace(rootpath, ''), md5sum)
21| output += fname.replace(rootpath, '', 1) + ':' + md5sum + '\n'
Ipy рдореЗрдВ, рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рддреЗрдЬ рдерд╛ред рдЕрдЬрдЧрд░ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рддреНрд░реБрдЯрд┐ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдВрддрд░ рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ред
рдкрд░рд┐рдгрд╛рдо
рдФрд░ рдЗрд╕рд▓рд┐рдП, рдардВрдб рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ (рдФрд╕рдд):
- рд╕реАрдкреАрдереЙрди: ~ 0.06 рдПрд╕ред
- рдЖрдпрд░рдирдкрд╛рдЗрдерди: ~ 0.33 рдПрд╕ред
- рдЖрдпрд░рдирдкрд╛рдЗрдерди (рдЕрдиреБрдХреВрд▓рд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ): ~ 0.16 рдПрд╕ред
рдирдЧреНрди рдЖрдВрдЦреЛрдВ рд╕реЗ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдЬрдЧрд░ рдФрд░ рдЖрдпрд░рдирдкрд┐рдереЙрди рдореЗрдВ рдПрдХ рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЕрдЬрдЧрд░ рдХреА рддрд░рдл рд╕реЗ рдкрд╛рдВрдЪ рдЧреБрдирд╛ рд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рдн рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬрд┐рд╕реЗ ipy рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрднреА рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЕрднреА рднреА рдзреАрдорд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред
рдПрдХ рдФрд░ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИ: рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░, рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╣реА рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рддрджрдиреБрд╕рд╛рд░, рдардВрдб рдХрд╛ рдЗрддрдирд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рд┐рддреЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рд╣реЛ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдордп, рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗ рдмрд┐рдирд╛ред рд╣рдо рдХреЛрдб рдХреЛ рд▓реВрдк рдореЗрдВ рд░рдЦрдХрд░ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВред
рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рдгрд╛рдо:
CPython | IPY | ipy (рдЕрдиреБрдХреВрд▓рди) |
0: 00: 00.057000 | 0: 00: 00.327000 | 0: 00: 00.161000 |
0: 00: 00.056000 | 0: 00: 00.243000 | 0: 00: 00.093000 |
0: 00: 00.055000 | 0: 00: 00.234000 | 0: 00: 00.099000 |
0: 00: 00.058000 | 0: 00: 00.228000 | 0: 00: 00.096000 |
0: 00: 00.055000 | 0: 00: 00.226000 | 0: 00: 00.093000 |
0: 00: 00.055000 | 0: 00: 00.236000 | 0: 00: 00.093000 |
0: 00: 00.055000 | 0: 00: 00.225000 | 0: 00: 00.093000 |
0: 00: 00.055000 | 0: 00: 00.261000 | 0: 00: 00.092000 |
0: 00: 00.057000 | 0: 00: 00.240000 | 0: 00: 00.092000 |
0: 00: 00.057000 | 0: 00: 00.227000 | 0: 00: 00.093000 |
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдкреНрд░рд╢рдВрд╕рдиреАрдп рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИред рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд▓рдЧрднрдЧ 0.7 рд╕реЗрдХрдВрдб рдХрд╛ рд╕рдордп рдХреЗрд╡рд▓ рдЖрдпрд░рдирдкрд╛рдЗрдерди рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдордп рд╣реИред рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди, рджреЗрд╢реА рдЕрдЬрдЧрд░ рдореЗрдВ рдЪрд▓ рд░рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рд╕реАрдкреАрдереЙрди рд▓рдЧрднрдЧ рддреБрд░рдВрдд рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд╣рд▓рд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдмрд╛рдж рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рдорд╛рди рддреЗрдЬ рдерд╛ред рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЧрд░реНрдо рдкрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЧрдП ipy рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХреЛрдб рднреА рджреЗрд╢реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ рдбреЗрдврд╝ рдЧреБрдирд╛ рдзреАрдорд╛ рд╣реИред
CPython рдФрд░ IronPython рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрдЪрд┐рдд рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдпрджрд┐ рдкреНрд░рджрд░реНрд╢рди рд╕рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдорд╛рди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдХреЗрд╡рд▓ рдЖрдпрд░рдирдкрд╛рдЗрдерди рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИред рдХреБрдЫ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рдФрд░ рдХреАрдбрд╝реЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдпрд░рдирдкрд┐рдереЙрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдирд╛ рднреА рд╕рд╡рд╛рд▓ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред рд╡рд╣ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рд╕реМрдВрдкреЗ рдЧрдП рдХрд░реНрддрд╡реНрдпреЛрдВ рдХрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИред
рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рд╕реБрдирдХрд░ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреАред
рдпреБрдкреАрдбреАmstyura рдиреЗ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде ipy рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛:
from System.IO import StreamWriter, Directory, SearchOption, File, Path from System import String, BitConverter, Environment, Array from System.Security.Cryptography import MD5CryptoServiceProvider def getMD5sum(fileName): stm = File.OpenRead(fileName) md5 = MD5CryptoServiceProvider() hash = md5.ComputeHash(stm) stm.Close() return BitConverter.ToString(hash).Replace("-", "").ToLower() rootpath = 'app' workingDir = Environment.CurrentDirectory Environment.CurrentDirectory = rootpath appFiles = Directory.EnumerateFiles('.', '*', SearchOption.AllDirectories) output = StreamWriter(File.OpenWrite(Path.Combine(workingDir, 'checksums.csv'))) for _, file in enumerate(appFiles): output.Write(file.replace(".", "", 1).replace("\\", "/")) output.Write(":") output.WriteLine(getMD5sum(file)) output.Close() Environment.CurrentDirectory = workingDir
рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдкрд░рд┐рдгрд╛рдо:
0: 00: 00.116000
0: 00: 00.063000
0: 00: 00.064000
0: 00: 00.063000
0: 00: 00.059000
0: 00: 00.059000
0: 00: 00.058000
0: 00: 00.058000
0: 00: 00.058000
0: 00: 00.059000
рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдФрд░ рд╡рд╣ рдЕрдЬрдЧрд░ рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рдЬрд╛рдПрдЧрд╛ - рд╡реЗ рд▓рдЧрднрдЧ рдПрдХ рдмрд░рд╛рдмрд░ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рд╢реБрд░реБрдЖрдд рдЕрднреА рднреА рдзреАрдореА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рддреЗрдЬ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЬрд╛рд╣рд┐рд░ рд╣реИ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЖрдпрд╛рдд рдпрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдХреЗрд╡рд▓ рдЖрдпрд╛рдд рдУрдПрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХреЙрд▓ os.walk (rootpath) - рдпрд╣ рдкрд╣рд▓реА рдпрд╛рддреНрд░рд╛ рдХреЗ рд╕рдордп рдХреЛ ~ 0.145 s рддрдХ рдмрдврд╝рд╛ рджреЗрдЧрд╛! рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рдпрд╣ рдлрдВрдХреНрд╢рди рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЗрддрдирд╛ рднрд╛рд░реА рд╣реИред рдпрджрд┐ рдЖрдк os.getcwd () рдХреА рддрд░рд╣ рдХреБрдЫ рд╕рд░рд▓ рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдЧрддрд┐ рдореЗрдВ рдмрд╣реБрдд рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ