Python:从命令行参数读取文件名

Python:从命令行参数读取文件名,python,python-2.7,Python,Python 2.7,我正在制作一个简单的脚本,从谷歌表单生成的csv文件中计算一些值 脚本如下: import csv import os.path fileName=None if __name__=="__main__": try: fileName=argv[1] isFile(fileName) pass except Exception as e: print("You must provide a valid filen

我正在制作一个简单的脚本,从谷歌表单生成的csv文件中计算一些值

脚本如下:

import csv
import os.path

fileName=None

if __name__=="__main__":
    try:
        fileName=argv[1]
        isFile(fileName)
        pass
    except Exception as e:
        print("You must provide a valid filename as parameter")
        raise

def isFile(fileName):
    if(not os.path.isfile(fileName)):
        raise ValueError("You must provide a valid filename as parameter")

print fileName


def readCsvAndCountPercentPerFormItemFromGoogleForms(fileName):
    times={}
    totalRows=0
    with open(fileName,'r') as csvfile:

        csvReader=csv.reader(csvfile);

        for row in csvreader:

            value=row[1]

            if(value in times.values()):
                times[value]+=1
            else:
                times[value]=1

            totalRows+=1

        return calculateDictionaryAsPercent(times,totalRows)

def calculateDictionaryAsPercent(times,totalRows):

    if(totalRows==0):
        raise ValueError("The file does not contain any rows")

    for key,val in times.items():
            times[key]=(val/totalRows)*100

    return times


finalTimes=readCsvAndCountPercentPerFormItemFromGoogleForms(fileName)

print finalTimes
但我得到了以下错误:

Traceback (most recent call last):
  File "csv.py", line 1, in <module>
    import csv
  File "/home/pcmagas/Kwdikas/python/csv.py", line 54, in <module>
    finalTimes=readCsvAndCountPercentPerFormItemFromGoogleForms(fileName)
  File "/home/pcmagas/Kwdikas/python/csv.py", line 26, in readCsvAndCountPercentPerFormItemFromGoogleForms
    with open(fileName,'r') as csvfile:
TypeError: coercing to Unicode: need string or buffer, NoneType found
下面的代码是根据在上找到的第一个答案编写的

因此,您可以为我提供一个解决方案,因为我不太经常编写python,因此为了更好地学习它,我编写了以下脚本

编辑1 代码已重新格式化为:

import csv
from sys import argv
import os.path


def isFile(fileName):
    if(not os.path.isfile(fileName)):
        raise ValueError("You must provide a valid filename as parameter")


def readCsvAndCountPercentPerFormItemFromGoogleForms(fileName):
    times={}
    totalRows=0
    with open(fileName,'r') as csvfile:

        csvReader=csv.reader(csvfile);

        for row in csvreader:

            value=row[1]

            if(value in times.values()):
                times[value]+=1
            else:
                times[value]=1

            totalRows+=1

        return calculateDictionaryAsPercent(times,totalRows)

def calculateDictionaryAsPercent(times,totalRows):

    if(totalRows==0):
        raise ValueError("The file does not contain any rows")

    for key,val in times.items():
            times[key]=(val/totalRows)*100

    return times


fileName=None

if __name__=="__main__":
    try:
        fileName=argv[1]
        print("Filename: ",fileName)
        isFile(fileName)
        pass
    except Exception as e:
        print("You must provide a valid filename as parameter")
        raise

print("Filename: ",fileName)
finalTimes=readCsvAndCountPercentPerFormItemFromGoogleForms(fileName)

print finalTimes

仍然是相同的错误。

最后,如前所述,脚本应该是这样的:

import csv
from sys import argv
import os.path


def readCsvAndCountPercentPerFormItemFromGoogleForms(fileName):
    times={}
    totalRows=0
    with open(fileName,'r') as csvfile:

        csvReader=csv.reader(csvfile);

        for row in csvReader:

            value=row[1]

            if(value in times.values()):
                times[value]+=1
            else:
                times[value]=1

            totalRows+=1

        return calculateDictionaryAsPercent(times,totalRows)

def calculateDictionaryAsPercent(times,totalRows):

    if(totalRows==0):
        raise ValueError("The file does not contain any rows")

    for key,val in times.items():
            times[key]=(val/totalRows)*100

    return times


def isFile(fileName):
    if(not os.path.isfile(fileName)):
        raise ValueError("You must provide a valid filename as parameter")

fileName=None

if __name__=="__main__":
    try:
        fileName=argv[1]
        isFile(fileName)
        pass
    except Exception as e:
        print("You must provide a valid filename as parameter")
        raise

finalTimes=readCsvAndCountPercentPerFormItemFromGoogleForms(fileName)

print finalTimes
您必须先定义isFilefileName:然后再尝试调用它。您的文件名似乎为csv.py。无法在名为csv.py的文件中导入csv;它将直接导入自身。为文件选择其他名称。
import csv
from sys import argv
import os.path


def readCsvAndCountPercentPerFormItemFromGoogleForms(fileName):
    times={}
    totalRows=0
    with open(fileName,'r') as csvfile:

        csvReader=csv.reader(csvfile);

        for row in csvReader:

            value=row[1]

            if(value in times.values()):
                times[value]+=1
            else:
                times[value]=1

            totalRows+=1

        return calculateDictionaryAsPercent(times,totalRows)

def calculateDictionaryAsPercent(times,totalRows):

    if(totalRows==0):
        raise ValueError("The file does not contain any rows")

    for key,val in times.items():
            times[key]=(val/totalRows)*100

    return times


def isFile(fileName):
    if(not os.path.isfile(fileName)):
        raise ValueError("You must provide a valid filename as parameter")

fileName=None

if __name__=="__main__":
    try:
        fileName=argv[1]
        isFile(fileName)
        pass
    except Exception as e:
        print("You must provide a valid filename as parameter")
        raise

finalTimes=readCsvAndCountPercentPerFormItemFromGoogleForms(fileName)

print finalTimes