Jacob cummins
Jacob cummins

Reputation: 93

How to open multiple files without repeating the code

I am making a program that will open multiple files, they are all very similar. All contains a few one word lines in lowercase on Notepad. I do not want to repeat the code multiple times. Ideally I want to use a while loop to repeat the code but change what file it opens each repeat. Is there a way to do it? This is the current code:

File = open("Key Words\Audio.txt","r") #This will open the file called Audio.
Audio = [] #This creates the Audio list
Audio = File.read().splitlines() #This saves everything on each line of the  Audio file to a diffrent section of the Audio list.


File = open("Key Words\Calls.txt","r") #This will open the file called Calls.
Calls = [] #This creates the Calls list
Calls = File.read().splitlines() #This saves everything on each line of the Calls file to a diffrent section of the Calls list.


File = open("Key Words\Charging.txt","r") #This will open the file called Charging.
Charging = [] #This creates the Charging list
Charging = File.read().splitlines() #This saves everything on each line of the Charging file to a diffrent section of the Charging list.

File.close() #This closes the File(s).

Upvotes: 1

Views: 229

Answers (5)

yanbo
yanbo

Reputation: 1

You can try unipath

# Install
$easy_install unipath

# In python
from unipath import Path

t1 = Path('Key Words\Audio.txt')
...

Upvotes: 0

Sci Prog
Sci Prog

Reputation: 2691

Try this

Audio = []
Calls = []
Charging = []    
FILES_LISTS = (
  ( "Key Words\Audio.txt", Audio ),
  ( "Key Words\Calls.txt", Calls ),
  ( "Key Words\Charging.txt", Charging )
)
for file_name, list_var in FILES_LISTS:
  File = open( file_name, 'r' )
  list_var += File.read().splitlines()
  File.close()

Make sure to type list_var += and not list_var =. This works because lists are mutable and because python works with references.

Upvotes: 0

MSeifert
MSeifert

Reputation: 152587

Put the code in a function:

def openandread(filename):
    # No need to close the file if you use with:
    with open(filename,"r") as File:
        return_this = File.read().splitlines()
    return return_this

and then just call this function multiple times:

Audio = openandread("Key Words\Audio.txt")
Calls = openandread("Key Words\Calls.txt")
Charging = openandread("Key Words\Charging.txt")

or if you want to make it even shorter:

Audio, Calls, Charging = (openandread(i) for i in ["Key Words\Audio.txt", "Key Words\Calls.txt", "Key Words\Charging.txt"])

Upvotes: 0

pp_
pp_

Reputation: 3489

This is what functions are for:

def readfile(filepath):
    with open(filepath, 'r') as f:
        return f.read().splitlines()

audio = readfile('Key Words\Audio.txt')
calls = readfile('Key Words\Calls.txt')
charging = readfile('Key Words\Charging.txt')

Upvotes: 1

Zizouz212
Zizouz212

Reputation: 4998

Make a list of the files you need to open:

files_to_open = [
    'file_1.txt',
    'file_2.txt'
]

calls_info = {}

Iterate over the list, and open and process:

for file_ in files_to_open:
    with open(file_) as f:
        calls_info[file_] = f.read().splitlines()

Here, I created a calls_info variable. What this will do is store everything in a dictionary. These hold keys and values - to access the value of a file, simply index it like so:

calls_info[file_path] # Make sure file_path is the right path you put in the list!

Upvotes: 0

Related Questions