84

How do you tell Python where to save a text file?

For example, my computer is running the Python file off my desktop. I want it to save all the text file in my documents folder, not on my desktop. How do I do that in a script like this?

name_of_file = raw_input("What is the name of the file: ")
completeName = name_of_file + ".txt"
#Alter this line in any shape or form it is up to you.
file1 = open(completeName , "w")

toFile = raw_input("Write what you want into the field")

file1.write(toFile)

file1.close()
Peter Mortensen
  • 30,030
  • 21
  • 100
  • 124
user1031493
  • 941
  • 1
  • 8
  • 8

8 Answers8

93

Just use an absolute path when opening the filehandle for writing.

import os.path

save_path = 'C:/example/'

name_of_file = raw_input("What is the name of the file: ")

completeName = os.path.join(save_path, name_of_file+".txt")         

file1 = open(completeName, "w")

toFile = raw_input("Write what you want into the field")

file1.write(toFile)

file1.close()

You could optionally combine this with os.path.abspath() as described in Bryan's answer to automatically get the path of a user's Documents folder. Cheers!

Mehdi Nellen
  • 7,676
  • 4
  • 31
  • 48
Acorn
  • 46,659
  • 24
  • 128
  • 169
40

Use os.path.join to combine the path to the Documents directory with the completeName (filename?) supplied by the user.

import os
with open(os.path.join('/path/to/Documents',completeName), "w") as file1:
    toFile = raw_input("Write what you want into the field")
    file1.write(toFile)

If you want the Documents directory to be relative to the user's home directory, you could use something like:

os.path.join(os.path.expanduser('~'),'Documents',completeName)

Others have proposed using os.path.abspath. Note that os.path.abspath does not resolve '~' to the user's home directory:

In [10]: cd /tmp
/tmp

In [11]: os.path.abspath("~")
Out[11]: '/tmp/~'
Robert Rodkey
  • 403
  • 3
  • 9
unutbu
  • 777,569
  • 165
  • 1,697
  • 1,613
15

A small update to this. raw_input() is renamed as input() in Python 3.

Python 3 release note

xrisk
  • 3,562
  • 20
  • 41
der_radler
  • 487
  • 4
  • 14
12

Another simple way without using import OS is,

outFileName="F:\\folder\\folder\\filename.txt"
outFile=open(outFileName, "w")
outFile.write("""Hello my name is ABCD""")
outFile.close()
Paul Thomas
  • 467
  • 6
  • 15
9

If you want to save a file to a particular DIRECTORY and FILENAME here is some simple example. It also checks to see if the directory has or has not been created.

import os.path
directory = './html/'
filename = "file.html"
file_path = os.path.join(directory, filename)
if not os.path.isdir(directory):
    os.mkdir(directory)
file = open(file_path, "w")
file.write(html)
file.close()

Hope this helps you!

Asher
  • 2,488
  • 6
  • 26
  • 39
3

Using an absolute or relative string as the filename.

name_of_file = input("What is the name of the file: ")
completeName = '/home/user/Documents'+ name_of_file + ".txt"
file1 = open(completeName , "w")
toFile = input("Write what you want into the field")
file1.write(toFile)
file1.close()
gavstar
  • 39
  • 3
  • 2
    Welcome to Stack Overflow! You probably could have just shown the line of code where you assign the file path to completeName, just to make your change/solution a bit clearer. – strava Oct 11 '18 at 10:35
2

Just give your desired path if file does not exist earlier;

        from os.path import abspath
        with open ('C:\\Users\\Admin\\Desktop\\results.txt', mode = 'w') as final1:
            print(final1.write('This is my new file.'))

        print(f'Text has been processed and saved at {abspath(final1.name)}')

Output will be:

Text has been processed and saved at C:\Users\Admin\Desktop\results.txt
0

If you want save file or another some in folder you can use shutil module from base python library.

import shutil

path_to_file = f'home/user/My_Project/media/{my_file_name}'
path_to_folder = 'home/user/my_folder/'
   
shutil.copy(path_to_file, path_to_folder)

You can do it ever for some file's list or in Django querysets:

from images.models import Image
import shutil

images = Image.objects.all()
for image in images:
    image_path = image.file.path
    shutil.copy(image_path, path_to folder)
   

All your choised files will put in directed folder.