Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Turn any string into a valid filename in Python.
def format_filename(s):
"""Take a string and return a valid filename constructed from the string.
Uses a whitelist approach: any characters not present in valid_chars are
removed. Also spaces are replaced with underscores.
Note: this method may produce invalid filenames such as ``, `.` or `..`
When I use this method I prepend a date string like '2009_01_15_19_46_32_'
and append a file extension like '.txt', so I avoid the potential of using
an invalid filename.
valid_chars = "-_.() %s%s" % (string.ascii_letters, string.digits)
filename = ''.join(c for c in s if c in valid_chars)
filename = filename.replace(' ','_') # I don't like spaces in filenames.
return filename

This comment has been minimized.

Copy link

@GwynethLlewelyn GwynethLlewelyn commented May 7, 2019

I get almost all filenames preceded by a dot...


This comment has been minimized.

Copy link

@jowouters jowouters commented Dec 28, 2019

(just a reminder for others who would like to use this code)
Make sure to import the string module of the standard Python library:

import string

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.