TKINTER用户输入到操作系统步行 - 获取用户输入以拔下文件名



这很难总结我要做的事情,我怀疑标题使其更容易遵循,但是...

我正在使用TKINTER构建选项对话框,从而允许用户输入自己的文件名分解结构。OS.Walk将根据用户输入读取和设置文件夹结构。

配置解析器/用户输入

[Alpha] aoth = file[:1], file[:3]

问题是,我可以根据用户输入(即在alpha结构中读取'aoth',通过两个文件夹分解)分解结构。但是,OS.Walk/Python认为这是实际输入。分解代码以仅显示相关信息:

for root, subFolders, files in os.walk(Entry.get(self.sourceE)):
    for file in files:
        if not file.startswith('.'):
            if file[0].isalpha():
                alpfol = '%s' % self.alpha_fol.get()
                alset = self.alphaa_radio.get()
                if alset == 1:
                    file_strut = '%s' % file[:1]
                elif alset == 2:
                    file_strut = '%s/%s' % (file[:1], file[:2])
                elif alset == 3:
                    files_strip = [st.strip() for st in (self.radio_aBoxV.get()).split(',')]
                    files_count = len(files_strip)
                    ###
                    file_count_check = '%s/'*files_count
                    file_strut = file_count_check % tuple(files_strip)
                    ###
                subFolder = os.path.join(Entry.get(self.destE), alpfol, file_strut)
            checkFile = os.path.join(subFolder, file)
                ........

我知道这不是最优雅的代码,而是Alset 1/2的工作原理,而Alset 3认为文件[:1]/file [:3]是字面输入。如何使用户输入读取实际文件名并相应分解?我敢肯定这很简单。

感谢您阅读本!

好吧,就像您建议这是一个非常简单且明显的错误:

" file [:1],file [:2]" file [:1],file [:2] 。。。>

您的前两个选项是硬编码的,因此他们正在使用参考文件并将 slice note法应用于其中。最后一个采用 String ,然后将其扔在周围;该程序不知道您是指将字符串"文件" 转换为参考文件 String" [:1]" 并将其转换为切片符号[:1]

解决问题的解决方案是通过进入 String 并将必要的信息从中删除来进行转换。您这样做是为了获得分区的数量,但切勿转换参考 slice note法。您可以在代码中使用这些分区,并使用 split slice notegonge 进行一些调整,以"剪切"重要的位置,但我要建议REGEX( re python中的模块),因为它是一个更灵活的解决方案。

python re howto

以下是我主要工作的样本;我在某个时候发表了评论,可能会导致它给出不完美的结果(同时启动和阶段),但这是一个非常晦涩的案例,您只需删除使用的选项即可获得代码高达100%切片符号的步骤部分。您还会注意,仅从用户盲目地删除切片符号就可以导致畸形目录名称。

(注意 - 我实际上没有在Python 2中编程,但据我所知,这是2.7安全的;希望只有必要的更改是次要的语法调整)

import os, os.path
import re
PATTERNRE=re.compile('''(?P<parts>[Ff]ile[(?P<start>-?d*):+(?P<end>-?d*):?(?P<step>-?d*)])''')
def formatindices(start,end,step,file): ## Slice Notation only accepts Ints,
                                        ## and int('{empty string}') raises an error,
                                        ## so we're programming around it
    step = int(step) if step else 1
    if not start:
        if step>0: start=0
        else: start=-1
    else:
        start=int(start)
    end = int(end) if end else len(file) ## Having both negative Start and Step will
                                         ## break this on the else statement, couldn't
                                         ## find an integer to represent "index before 0"
    return start,end,step
files=['hello.py','world.pyc','helloworld.tar.gz.','foo.pyo','bar.pyo','foobar.whl']
patterns=['fl<;>','file[:]','file[:1],file[:2]','file[1:2]','file[:2],file[2:4]','file[:-3:2],file[:-2:-1],file[-1:]']
for i,(file,pattern) in enumerate(zip(files,patterns),start=1):
    try:
        if not file.startswith('.') and file[0].isalpha():
            print "Trial %d: %s=>%s" % (i,file,pattern)
            matches=PATTERNRE.finditer(pattern) ## Use Re to find all "file[x:y:z]"
            ## Convert to  list of tuples
            indices=[(match.group('start'),match.group('end'),match.group('step')) for match in matches]
            ## Using IOError because a lot that can otherwise go wrong comes up as
            ## ValueError (Which is the most-logical ErrorName)
            if not indices: raise IOError('Bad Formatting')
            ## Standardize indexes
            indices=[formatindices(start,end,step,file) for start,end,step in indices]
            print 'Indices: '+'|'.join(','.join(str(item) for item in startendstep) for startendstep in indices)
            ## Build File Structure
            file_strut='\'.join(file[start:end:step] for start,end,step in indices)
            print 'Folder Structure: '+file_strut
            ## Put together
            subFolder = os.path.join('directoryfrom self.destE', 'somefolder alpfol', file_strut)
            print'Output: '+subFolder+'n'
    except IOError:
        print 'No Pattern, Skippingn'

相关内容

  • 没有找到相关文章

最新更新