0

Can anyone help write a script, the goal is to find files with extension and save the name and path in TXT or CSV

that a script which find and print file file type and path,but how can i save the result to csv/txt ?

import fnmatch
import os
import csv

rootPath = '/'
pattern = '*.exe'
filepath = 'C:/Users/user/Desktop/filetest.txt'
for root, dirs, files in os.walk(rootPath):
    for filepath in fnmatch.filter(files, pattern):
        x = (os.path.join(root, filepath))
        print(x)

i try this one, but its save only the last line.

import fnmatch
import os
import csv

rootPath = '/'
pattern = '*.exe'
filepath = 'C:/Users/user/Desktop/filetest.txt'
for root, dirs, files in os.walk(rootPath):
    for filepath in fnmatch.filter(files, pattern):
        x = (os.path.join(root, filepath))
        file = open(filepath, 'w')
        file.write(x)
file.close()
print(x)
aynber
  • 22,380
  • 8
  • 50
  • 63
Maximus
  • 3
  • 1

2 Answers2

1
from glob import glob
import os

files = sorted(glob(os.path.join(rootPath, pattern)))

with open(filepath, 'w') as fid:
    fid.write('\n'.join(files))

1

I think the reason is you always open the file within loop using open(filepath, 'w') the option 'w' is always overwrite the file, if you want to append, you can use 'a', but I think in this case is not good solution because the main reason is you always reopen the file for each loop

By using your code, I think you can solve it by putting the open command outside the loop

import fnmatch
import os
import csv

rootPath = '/'
pattern = '*.exe'
filepath = 'C:/Users/user/Desktop/filetest.txt'
file = open(filepath, 'w')

for root, dirs, files in os.walk(rootPath):
    for filepath in fnmatch.filter(files, pattern):
        x = (os.path.join(root, filepath))
        file.write(x+'\n')

file.close()
d_frEak
  • 440
  • 3
  • 12