桌子和桌子函数 - Pythonic代码

时间:2013-12-07 08:12:35

标签: python

首先,我想要注意的是,这是一项学校作业但是我已经尝试了很长时间的代码(对我来说......我是一个糟糕的程序员)。所以,请不要以为我想要你做我的分配,一点也不!我只是希望你的帮助能够改进这些代码,并找出它的错误。希望你没有得到错误的印象。

关于代码的解释是在这篇文章的末尾, 这是我的代码:

class Table:

    def __init__(self,path,sep):
        try:
            f = open(path, "r")
            read_file = f.read()
            f.close()
        except:
            print "ERROR"
            return
        split_file = read_file.split["\n"]
        for i in range (len(split_file)):
            split_file[i] = split_file[i]/split(sep)
        split_file[0].remove(split_file[0][0])
        self.rows = []
        self.rows_names = []
        for row in split_file[1:-1]:
            self.rows.append(row[1:])
        for get in split_file[1:-1]:
            self.rows_names.append(get[0])
    self.cols.names = split_file[0]
    for i in range (len(self.cols_names)):
        self.cols.appens([])
    try:
        for place in self.rows:
            for i in range(len(place)):
                self.cols[i].append(place[i])
    except:
        raise ValueError

    rows_check = []
    cols_check = []
    for row in self.cols_names:
        if row in rows_check:
            raise ValueError
        else:
            rows_check.append(row)
    for cols in self.cols_name:
        if col in cols_check:
            raise ValueError
        else:
            cols_check.append(col)
    for number in self.cols[1:]:
        if number != len(self.cols[0]):
            raise ValueError
  • 我需要编写一个ctor(这是函数__ init__),它接收输入(除了self)“。txt”文件名和字符串sep。 ctor读取表并保存其数据。输入文件中的每一行(同样,它是一个简单的txt文件)包含由字符串sep分隔的数据。

  • 打开txt文件将采用“try-except”形式。如果发生故障(如果打开文件时出现错误,则“除”部分中的代码将运行并打印“出现错误”。

  • 如果通过打开文件文本没有失败,那么如果下一个案例之一为真,则ctor(函数)将使用ValueError类型的异常:

  • 有两列名称相同

  • 有两行同名

  • 有一行的列数与第一行的列数不同(行中的列数是在分割函数调用后创建的列表大小)。

注释:

*** txt文件是常规文件...就像微软注册的那样......“。txt”......没什么特别的

*** txt文件包含作为表格形式的文本。 例如:

Name,Gender,Age,Salary,Height
Menny,   M,    1,   1,   1
James,   J,    2,   2,   2
Sami,    S,    3,   3,   3

我不知道这段代码的问题是什么,我在运行时遇到了一些错误,我想让这段代码更加 pythonic 但不改变“的形式初始化”。

是的,有人能帮帮我吗?我有点失落。 非常感谢。

2 个答案:

答案 0 :(得分:0)

所以,你有几件看起来有点不对劲的东西:括号,函数名,缩进等。

无论如何,我不确定你希望最终表格表示的格式(底层结构)。通常,在python中,我们使用嵌套列表。因此,在下面的代码中,最终解析的表存储在self.nestedList中。

class Table:

    def __init__(self,path,sep):
        try:
            f = open(path, "r")
            read_file = f.read()
            f.close()
        except:
            print "ERROR"
            return

        table = read_file.split("\n")
        for i in range (len(table)):
            table[i] = table[i].split(sep)

        if len(table) > 0:
            ## check names of columns
            for i in range(len(table[0])):
                if table[0][i] in table[0][0:i]:
                    raise ValueError
            ## check names of rows, and their lengths
            rowNamesFound = []
            for i in range(1,len(table)):
                if len(table[i]) != len(table[0]):
                    raise ValueError
                if table[i][0] in rowNamesFound:
                    raise ValueError
                rowNamesFound.append(table[i][0])

        self.nestedList = table
        print table

除此之外,您可能希望使用string()方法删除表中条目周围的空格。

我也是学生,我感到痛苦。

答案 1 :(得分:0)

class Table:
    def __init__ (self, path, sep):
        try:
            with open (path, 'r') as f:
                lines = [l.strip () for l in f]
        except:
            print ('There was an error')
            return
        data = [line.split (sep) for line in lines]
        headers = data [0]
        data = data [1:]
        if len (set (headers) ) != len (headers):
            raise ValueError
        if any (len (line) != len (headers) for line in data):
            raise ValueError
        #This is the same "row name". I interpret it as "two rows whose first columns are identical"
        firstCol = [line [0] for line in data]
        if len (set (firstCol) ) != len (firstCol):
            raise ValueError