如何在python中检查文件是否存在以及是否存在重命名

2024-09-25 00:36:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种更像Python的方式来完成我的代码目前所做的事情。我相信有更好的办法。我想搜索直到filename-10,如果存在,创建一个名为filename-11的文件。在

如果你能帮忙那就太好了。在

编辑:9/1/14 9:46 PM

import re
import os
f=open('/Users/jakerandall/Desktop/Data Collection Python/temp.cnc', 'r')
text = re.search(r"(?<!\d)\d{4,5}(?!\d)", f.read())
JobNumber = text.string[text.start():text.end()]


if os.path.isfile("/Users/jakerandall/Desktop/Data Collection Python/%s-10.cnc" % JobNumber):
    f=open("/Users/jakerandall/Desktop/Data Collection Python/%s-11.cnc"  % JobNumber, 'w+b')
    f.close()
    print '1'
elif os.path.isfile("/Users/jakerandall/Desktop/Data Collection Python/%s-9.cnc" % JobNumber):
    f=open('/Users/jakerandall/Desktop/Data Collection Python/%s-10.cnc' % JobNumber, 'w+b')
    f.close()
    print '2'
elif os.path.isfile("/Users/jakerandall/Desktop/Data Collection Python/%s-8.cnc" % JobNumber):
    f=open('/Users/jakerandall/Desktop/Data Collection Python/%s-9.cnc' % JobNumber, 'w+b')
    f.close()
    print '3'
elif os.path.isfile("/Users/jakerandall/Desktop/Data Collection Python/%s-7.cnc" % JobNumber):
    f=open('/Users/jakerandall/Desktop/Data Collection Python/%s-8.cnc' % JobNumber, 'w+b')
    f.close()
    print '4'
elif os.path.isfile("/Users/jakerandall/Desktop/Data Collection Python/%s-6.cnc" % JobNumber):
    f=open('/Users/jakerandall/Desktop/Data Collection Python/%s-7.cnc' % JobNumber, 'w+b')
    f.close()
    print '5'
elif os.path.isfile("/Users/jakerandall/Desktop/Data Collection Python/%s-5.cnc" % JobNumber):
    f=open('/Users/jakerandall/Desktop/Data Collection Python/%s-6.cnc' % JobNumber, 'w+b')
    f.close()
    print '6'
elif os.path.isfile("/Users/jakerandall/Desktop/Data Collection Python/%s-4.cnc" % JobNumber):
    f=open('/Users/jakerandall/Desktop/Data Collection Python/%s-5.cnc' % JobNumber, 'w+b')
    f.close()
    print '7'
elif os.path.isfile("/Users/jakerandall/Desktop/Data Collection Python/%s-3.cnc" % JobNumber):
    f=open('/Users/jakerandall/Desktop/Data Collection Python/%s-4.cnc' % JobNumber, 'w+b')
    f.close()
    print '8'
elif os.path.isfile("/Users/jakerandall/Desktop/Data Collection Python/%s-2.cnc" % JobNumber):
    f=open('/Users/jakerandall/Desktop/Data Collection Python/%s-3.cnc' % JobNumber, 'w+b')
    f.close()
    print '9'
elif os.path.isfile("/Users/jakerandall/Desktop/Data Collection Python/%s-1.cnc" % JobNumber):
    f=open('/Users/jakerandall/Desktop/Data Collection Python/%s-2.cnc' % JobNumber, 'w+b')
    f.close()
    print '10'
elif os.path.isfile("/Users/jakerandall/Desktop/Data Collection Python/%s.cnc" % JobNumber):
    f=open('/Users/jakerandall/Desktop/Data Collection Python/%s-1.cnc' % JobNumber, 'w+b')
    f.close()
    print '11'
else:
    f=open('/Users/jakerandall/Desktop/Data Collection Python/%s.cnc' % JobNumber, 'w+b')
    f.close()
    print '12'
f.close()

Tags: pathtextclosedataosopenuserscollection
2条回答

简单点的怎么样:

import glob

file_directory = '/Users/jakerandall/Desktop/Data Collection Python/'
files = glob.glob('{}{}*.cnc'.format(file_directory, JobNumber))

现在,files将是目录中实际存在并与您的模式匹配的文件名列表。在

您可以检查此列表的长度,然后:

  1. 如果它是空的,那么创建第一个文件,它就是'{}.cnc'.format(JobNumber)。在
  2. 如果列表的长度等于11,则需要创建编号为11的文件(因为模式将匹配第一个文件,即没有任何-的文件,因此长度为11意味着最后一个文件是-10.cnc)。在
  3. 否则,所需的文件为1—列表的长度。因此,如果列表有5项,则表示最后一个文件是-4.cnc(因为模式也将匹配第一个文件)。在

您仍然需要查看是否可以打开它们,因为运行Python脚本的用户可能没有足够的权限。在

下面是一个将所有这些放在一起的示例:

^{pr2}$

我真的写过这样的东西!不过,我是靠记忆工作的。这作为一个单独的模块很有用,因为以这种方式备份文件是相当常见的。在

# /backup_dash_one.py

import os, glob, re

def backup(full_path, num_backups=None):
    """Usage: backup('example/pathname.ext', [num_backups])
    returns: example/pathname-1.ext, advances all backups by 1

    Given example/pathname.ext, creates backups named
    example/pathname-1.ext, -2.ext, -3.ext until there are
    as many backups as num_backups, purging those older."""

    head, tail = os.path.split(full_path)
    tailname, tailext = os.path.splitext(tail)

    def find_backup_num(path):
        return int(re.search(r"-(\d+)\.[^.\\/]*", path).group(1))

    paths = sorted(glob.glob(os.path.join(head,tailname)+"-*"+tailext),
                   key=find_backup_num)
    for path in reversed(paths[:]):
        head_tail, backup_num, ext, _* = re.split(r"-(\d+)(\.[^\\./]*)$", path)
        new_path = head_tail + "-" + str(int(backup_num)+1) + ext

        with open(path) as infile, open(new_path,'w') as outfile):
            for line in infile:
                outfile.write(line)
        if new_path not in paths:
            paths.append(new_path)

    while num_backups and len(paths) > num_backups:
        os.remove(paths[-1])
        paths.pop()

就我个人而言,如果我真的有时间去做这件事,我会做更多的研究,做一些类似的事情:

^{pr2}$

所以你可以这样做:

with BackupFile("path/to/file/that/needs/backups.txt", 'r+', num_backups=12) as f:
    make_change(f)
# ta-da it's backed up!

不过,我根本没有太多的机会来测试这一点,所以我猜它有点不对劲:)

相关问题 更多 >