如何编写“没有文件以”用户定义的扩展名结尾

时间:2015-07-09 17:09:46

标签: python python-2.7

我想知道是否有办法告诉用户他们指定的目录中没有文件具有他们正在寻找的文件扩展名。我能想到的唯一方法是使用if / else,但如果目录中存在任何其他文件扩展名,则会被绊倒。我能够找到一些东西,但它是bash:Listing files in a directory that do not end with vXXX而不是我想要的东西。

以下是目录的示例:

out-30000000.txt.processed
out-31000000.txt.processed
out-32000000.txt.processed
out-33000000.txt.processed
out-34000000.txt.processed
nope.csv

如果我使用以下代码:

def folder_location():
    location = raw_input("What is the folder containing the data you like processed located? ")
    #location = "C:/Code/Samples/Dates/2015-06-07/Large-Scale Data Parsing/Data Files"
    if os.path.exists(location) == True: #Tests to see if user entered a valid path
        print "You entered:",location
        if raw_input("Is this correct? Use 'Y' or 'N' to answer. ") == "Y":
            print ""
            file_extension(location)
        else:
            folder_location()
    else:
        print "I'm sorry, but the file location you have entered does not exist. Please try again."
        folder_location()

def file_extension(location):
    file_extension = raw_input("What is the file type (.txt for example)? ")
    print "You entered:", file_extension
    if raw_input("Is this correct? Use 'Y' or 'N' to answer. ") == "Y":
        print ""
        each_file(location, file_extension)
    else:
        file_extension(location)

def each_file(location, file_extension):
    try:
        column = (raw_input("Please enter column name you want to analyze: ")) #Using smcn
        print "You entered:",column
        if raw_input("Is this correct? Use 'Y' and 'N' to answer. ") == "Y":
            print ""
            sort_by(location,file_extension,column)
        else:
            each_file(location,file_extension)
    except TypeError:
        print "That is not a valid column name. Please try again."
        each_file(location,file_extension)

def sort_by(location, file_extension, column):
    content = os.listdir(location)
    for item in content:
        if item.endswith(file_extension):
            data = csv.reader(open(os.path.join(location,item)),delimiter=',')
            col_position = get_columnposition(data.next(),column)
            to_count = sorted(data, key=operator.itemgetter(col_position))
            count_date(to_count, location)
        else:
            print "No file in this directory ends with " + file_extension

我明白了:

No file in this directory ends with .processed

然后是我的其余输出(代码未在此处发布)。

有没有办法让我说(我将把它放在一个代码块中,只是为了展示它在我的脑海中是如何工作的):

def file_extension(location):
    file_extension = raw_input("What is the file type (.txt for example)? ")
    print "You entered:", file_extension
    if raw_input("Is this correct? Use 'Y' or 'N' to answer. ") == "Y":
        print ""
        each_file(location, file_extension)
    else:
        file_extension(location)

def each_file(location, file_extension):
    try:
        column = (raw_input("Please enter column name you want to analyze: ")) #Using smcn
        print "You entered:",column
        if raw_input("Is this correct? Use 'Y' and 'N' to answer. ") == "Y":
            print ""
            sort_by(location,file_extension,column)
        else:
            each_file(location,file_extension)
    except TypeError:
        print "That is not a valid column name. Please try again."
        each_file(location,file_extension)

def sort_by(location, file_extension, column):
    content = os.listdir(location)
    for item in content:
        if item.endswith(file_extension):
            data = csv.reader(open(os.path.join(location,item)),delimiter=',')
            col_position = get_columnposition(data.next(),column)
            to_count = sorted(data, key=operator.itemgetter(col_position))
            count_date(to_count, location)
        if no item.endswith(file_extension):
            print "No file in this directory ends with " + file_extension

非常感谢任何帮助。如果它有用,我可以编辑我目前的其余代码。

谢谢!

1 个答案:

答案 0 :(得分:1)

您的逻辑应如下:

  1. 询问目录
  2. 要求延期
  3. 检查是否有任何文件以该扩展名结尾
  4. 如果至少有一个文件,请询问列
  5. 要简化这一切,请使用csvglob

    import glob
    import csv
    import os
    
    directory = input('Please enter the directory: ')
    extension = input('Please enter the extension (.txt, .csv): ')
    files = list(glob.glob(os.path.join(directory, extension)))
    if not files:
       print('Sorry, no files match your extension {} in the directory {}'.
             format(extension, directory))
    else:
        for file_name in files:
            col = input('Enter the column number for {}'.format(file_name))
            with open(file_name, 'r') as thefile:
                reader = csv.reader(thefile, delimiter=',')
                for row in reader:
                    try:
                        do_something(row[col])
                    except IndexError:
                        print('Column {} does not exist'.format(col))