首先,楼主给的csv文件本身是参差的,所以只能用csv.reader取得一行的list,需要自己去解析
然后,800个的数据量也不算太小,用dict建立索引的话效率不会太高
综上,我的想法是数据结构用一个保存作者名的set和保存2位有共同著作的作者的set,这样占用的空间也比较小,然后建立表格也比较简单。
不过实现需要一点时间,晚上回家之后试着写写看吧。不过800个确实挺多,显示出来的表能有多大啊。
-----------------------------------------------------------------------------------
import csv
import itertools
if __name__ == '__main__':
reader = csv.reader(open('books.csv'))
authors = set()
pairs = set()
for line in reader:
list = line[3:]
if list[0] == 'column1': continue
if '' in list : list.remove('')
for str in list: authors.add(str)
for pair in itertools.combinations(list, 2): pairs.add(pair)
line = ''
for author1 in authors:
line += '\t' + author1
print(line)
for author1 in authors:
line = author1
for author2 in authors:
line += '\t' + ('X' if author1 == author2 else '1' if ((author1, author2) in pairs or (author2, author1) in pairs) else '0')
print(line)
我写的,从楼上的代码学习到了itertools.combinations的用法,感谢。
代码修改了一次,我被某种一切都是对象的语言控制了,不用类不舒服斯基。现在这样看舒服多了。
Python文件 *** 作主要有以下几种方式:
打开文件:使用open()函数打开文件,该函数需要指定文件名以及打开文件的模式(例如只读、只写、追加等)。打开文件后,可以使用文件对象进行读取、写入、关闭等 *** 作。
读取文件:使用文件对象的read()、readline()、readlines()方法来读取文件内容。read()方法可以一次性读取整个文件,readline()方法可以逐行读取文件,readlines()方法可以将文件的所有行读取到一个列表中。
写入文件:使用文件对象的write()方法将数据写入文件。write()方法可以接受字符串作为参数,并将其写入文件。
关闭文件:使用文件对象的close()方法关闭文件。关闭文件后,可以避免占用系统资源。
with语句:使用with语句可以自动管理文件的关闭。with语句创建一个上下文环境,在该环境中打开文件,并在代码块执行完毕后自动关闭文件。
os模块:使用os模块可以进行文件和目录的 *** 作,包括创建、重命名、删除、移动等。os模块还提供了一些与文件路径相关的函数,例如join()、split()、abspath()等,可以方便地处理文件路径。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)