Python 多个输出文件
编辑:一开始我试图笼统一点,但结果却含糊不清。我在下面列出了更多细节 我正在编写一个脚本,从两个大型CSV文件中提取数据,一个是人们的日程安排,另一个是关于他们日程安排的信息。对数据进行挖掘和组合,最终创建pajek格式的人脉连接星期一Sat图,第七个图表示一周中的所有连接,字符串为1和0,表示一周中的哪几天进行了连接。最后一个图形是pajek格式的一个中断,由另一位研究人员编写的单独程序使用 Pajek格式有一个大的标题,然后将连接列为(vertex1 vertex2)无序对。很难将这些对存储在字典中,因为在同一天两对之间通常有多个连接Python 多个输出文件,python,file-io,Python,File Io,编辑:一开始我试图笼统一点,但结果却含糊不清。我在下面列出了更多细节 我正在编写一个脚本,从两个大型CSV文件中提取数据,一个是人们的日程安排,另一个是关于他们日程安排的信息。对数据进行挖掘和组合,最终创建pajek格式的人脉连接星期一Sat图,第七个图表示一周中的所有连接,字符串为1和0,表示一周中的哪几天进行了连接。最后一个图形是pajek格式的一个中断,由另一位研究人员编写的单独程序使用 Pajek格式有一个大的标题,然后将连接列为(vertex1 vertex2)无序对。很难将这些对存储
我想知道输出这些图形的最佳方式是什么。我是否应该制作一个较大的单幅图,并让第二个脚本将其解构为几个较小的图?我应该保持七个文件流打开,并在确定连接时写入它们,还是应该为每个流保留一些其他数据结构并在可以的时候输出它们(如队列)?我会打开七个文件流,因为如果数据量很大,则累积它们可能会占用大量内存。当然,这只是一个选项,如果您可以实时对它们进行排序,并且不需要首先读取所有数据来进行排序。我会打开七个文件流,因为如果数据量很大,则累积它们可能会占用大量内存。当然,这只是一个选项,如果你可以对他们进行实时排序,并且不需要首先读取所有数据来进行排序。“…从两个大型CSV文件中提取数据,一个是人们的日程安排,另一个是关于他们日程安排的信息。”含糊不清,但我想我明白了 “对数据进行挖掘和组合,最终创建人民联系星期一Sat的pajek格式图表,”挖掘和组合。酷。哪里在这个脚本中?在另一个应用程序中?通过第三方模块?通过某种web服务 这是一次一行的算法吗?一行输入是否产生一个连接,并发送到一个或多个每日图形 这是一个算法,必须看到一个完整的时间表,然后才能产生任何东西?[如果是这样的话,这可能是错误的,但我真的不知道,你的问题在这个核心细节上相当模糊。] “…表示一周内所有连接的第七个图形,带有1和0的字符串,以指示一周中哪些天进行了连接。”不完整,但可能足够好
def makeKey2( row2 ):
return ( row2[1], row2[2] ) # Whatever the lookup key is for source2
def makeKey1( row1 ):
return ( row1[3], row1[0] ) # Whatever the lookup key is for source1
dayFile = [ open("day%d.pajek","w") for i in range(6) ]
combined = open("combined.dat","w")
source1 = open( schedules, "r" )
rdr1= csv.reader( source1 )
source2 = open( aboutSchedules, "r" )
rdr2= csv.reader( source2 )
# "Combine" usually means a relational join between source 1 and source 2.
# We'll assume that source2 is a small-ish dimension and the
# source1 is largish facts
aboutDim = dict( (makeKey2(row),row) for row in rdr2 )
for row in rdr1:
connection, dayList = mine_and_combine( row, aboutDim[ makeKey1(row) ] )
for d in dayList:
dayFile[d].write( connection )
flags = [ 1 if d is in dayList else 0 for d in range(6) ]
combined.write( connection, flags )
差不多吧
要点是:
def makeKey2( row2 ):
return ( row2[1], row2[2] ) # Whatever the lookup key is for source2
def makeKey1( row1 ):
return ( row1[3], row1[0] ) # Whatever the lookup key is for source1
dayFile = [ open("day%d.pajek","w") for i in range(6) ]
combined = open("combined.dat","w")
source1 = open( schedules, "r" )
rdr1= csv.reader( source1 )
source2 = open( aboutSchedules, "r" )
rdr2= csv.reader( source2 )
# "Combine" usually means a relational join between source 1 and source 2.
# We'll assume that source2 is a small-ish dimension and the
# source1 is largish facts
aboutDim = dict( (makeKey2(row),row) for row in rdr2 )
for row in rdr1:
connection, dayList = mine_and_combine( row, aboutDim[ makeKey1(row) ] )
for d in dayList:
dayFile[d].write( connection )
flags = [ 1 if d is in dayList else 0 for d in range(6) ]
combined.write( connection, flags )
差不多吧
要点是:
@朗宁:这里有一个重要的教训(我几乎每天都在学习)。尽量避免泛化。细节很重要。@Lonnen:“挖掘和合并”?通过你的脚本或其他应用程序?@Lonnen:这里有一个重要的教训(我几乎每天都在应用)。尽量避免泛化。细节很重要。@Lonnen:“挖掘和合并”?通过您的脚本或其他应用程序?在脚本的早期组合。个人数据的一行输入导致约60行输出,并且由于一些数据未标准化(手动输入),因此需要进行大量的规范化和处理。不过,谢谢你,这非常有帮助。在脚本的早期组合。个人数据的一行输入导致约60行输出,并且由于一些数据未标准化(手动输入),因此需要进行大量的规范化和处理。不过谢谢你,这很有帮助。