首先,我想要注意的是,这是一项学校作业但是我已经尝试了很长时间的代码(对我来说......我是一个糟糕的程序员)。所以,请不要以为我想要你做我的分配,一点也不!我只是希望你的帮助能够改进这些代码,并找出它的错误。希望你没有得到错误的印象。
关于代码的解释是在这篇文章的末尾, 这是我的代码:
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 但不改变“的形式初始化”。
是的,有人能帮帮我吗?我有点失落。 非常感谢。答案 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