1

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).
1
  • 4
    Just make a function? Commented Feb 24, 2016 at 22:24

5 Answers 5

1

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')
Sign up to request clarification or add additional context in comments.

Comments

0

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!

Comments

0

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"])

Comments

0

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.

Comments

0

You can try unipath

# Install
$easy_install unipath

# In python
from unipath import Path

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.