仍在"潜入"Python,并希望确保我不会忽略某些东西.我写了一个脚本,从几个zip文件中提取文件,并将提取的文件保存在一个目录中.为了防止重复的文件名被覆盖,我写了这个小函数 - 我只是想知道是否有更好的方法来做到这一点?谢谢!
def unique_filename(file_name):
counter = 1
file_name_parts = os.path.splitext(file_name) # returns ('/path/file', '.ext')
while os.path.isfile(file_name):
file_name = file_name_parts[0] + '_' + str(counter) + file_name_parts[1]
counter += 1
return file_name
Run Code Online (Sandbox Code Playgroud)
我真的做需要的文件是在一个单一的目录和编号重复是在我的情况肯定是可以接受的,所以我不是在寻找一个更可靠的方法(寿"我想任何指针欢迎),但只是为了确保这样做是以正确的方式完成的.
我正在存储文件并需要一个唯一的文件名。我找到了使用 django.core.files.storage.get_available_name 的建议,但我完全错过了一些东西。我试过这个:
class MyModel(models.Model):
name = models.CharField( max_length=200, null=True )
filecontent = models.FileField( null=True, upload_to=Storage.get_available_name(name) )
Run Code Online (Sandbox Code Playgroud)
并得到错误:TypeError: unbound method get_available_name() must be called with Storage instance as first argument (got CharField instance instead)
我将其解释为我正在尝试在类上运行该方法,但我需要一个存储实例来运行它。存在一种叫做 DefaultStorage 的东西,它应该是“提供对当前默认存储系统的延迟访问”的东西,但它没有该get_available_name
方法,而只有一个_setup
不能在类上调用的方法。那么我应该如何让一个实例在这里工作呢?
我正在创建一个用户可以上传图像的网站.我需要确保每个文件名都有一个唯一的名称,以防止文件相互覆盖.我将生成唯一的名称.但是如何在保存文件之前更改文件名?我发现有一些方法可以更改保存到的文件夹,但这并不是我所追求的.
class saved_photos(models.Model):
name = models.CharField(max_length=20)
photo = models.ImageField(upload_to='images/things/', blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
在我的代码中我做:
new_name = get_unique_name()
p = saved_photos(name = new_name, photo = request.FILES)
p.save()
Run Code Online (Sandbox Code Playgroud)
我需要的是保存文件的实际名称是new_name.
我正在寻找 Django 在上传文件时用来生成唯一文件名的方法。
例如,如果我test.csv
在同一目录中上传一个调用了两次的文件,则第一个文件将另存为test.csv
,第二个文件将另存为test_2.csv
. 我已经尝试找到 Django 如何管理它,但我只发现django.utils.text.get_valid_filename
哪个可能有用,但这不是我正在寻找的......
我已经看到其他带有随机命名解决方案的 主题,这不是我在这里寻找的:)我真的很想了解 Django 如何管理这个问题。