简体   繁体   中英

How to open and read text files in a folder python

I have a folder which has a text files in it. I want to be able to put in a path to this file and have python go through the folder, open each file and append its content to a list.

import os

folderpath = "/Users/myname/Downloads/files/"
inputlst = [os.listdir(folderpath)]
filenamelist = []

for filename in os.listdir(folderpath):
    if filename.endswith(".txt"):
        filenamelist.append(filename)

print(filename list)

So far this outputs:

['test1.txt', 'test2.txt', 'test3.txt', 'test4.txt', 'test5.txt', 'test6.txt', 'test7.txt', 'test8.txt', 'test9.txt', 'test10.txt']

I want to have the code take each of these files, open them and put all of its content into a single huge list not just print the file name. Is there any way to do this?

If you are using Python3, you can use :

for filename in filename_list :
    with open(filename,"r") as file_handler :
        data = file_handler.read()

Please do mind that you will need the full (either relative or absolute) path to your file in filename

This way, your file handler will be automatically closed when you get out of the with scope. More information around here : https://docs.python.org/fr/3/library/functions.html#open

On a side note, in order to list files, you might want to have a look to glob and use :

filename_list = glob.glob("/path/to/files/*.txt")

You should use file open for this. Read here a documentation about its advanced options

Anyway, here is one way how you can do it:

import os

folderpath = r"yourfolderpath"
inputlst = [os.listdir(folderpath)]
filenamecontent = []

for filename in os.listdir(folderpath):
    if filename.endswith(".txt"):
        f = open(os.path.join(folderpath,filename), 'r')
        filenamecontent.append(f.read())

print(filenamecontent)

You can use fileinput

Code:


import fileinput

folderpath = "your_path_to_directory_where_files_are_stored"
file_list = [a for a in os.listdir(folderpath) if a.endswith(".txt")]
# This will return all the files which are in .txt format

get_all_files = fileinput.input(file_list)

with open("alldata.txt", 'ab+') as writefile:
    for line in get_all_files:
        writefile.write(line+'\n')

The above code will read all the data from .txt from a specified directory( folderpath ) and store it in alldata.txt So, you wanted to have that long list, that list is now stored in .txt file if you want, else you can remove the write process.

Links:

https://docs.python.org/3/library/fileinput.html

https://docs.python.org/3/library/functions.html#open

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM