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()
Best Answer
Just use an absolute path when opening the filehandle for writing.
import os.pathsave_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!
Use os.path.join to combine the path to the Documents
directory with the completeName
(filename?) supplied by the user.
import oswith 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/tmpIn [11]: os.path.abspath("~")Out[11]: '/tmp/~'
A small update to this. raw_input()
is renamed as input()
in Python 3.
Python 3 release note
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()
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.pathdirectory = './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!
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()
Just give your desired path if file does not exist earlier;
from os.path import abspathwith 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
If you want save file or another some in folder you can use shutil
module from base python library.
import shutilpath_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 Imageimport shutilimages = Image.objects.all()for image in images:image_path = image.file.pathshutil.copy(image_path, path_to folder)
All your choised files will put in directed folder.