Python 多个输出文件

Python 多个输出文件,python,file-io,Python,File Io,编辑:一开始我试图笼统一点,但结果却含糊不清。我在下面列出了更多细节 我正在编写一个脚本,从两个大型CSV文件中提取数据,一个是人们的日程安排,另一个是关于他们日程安排的信息。对数据进行挖掘和组合,最终创建pajek格式的人脉连接星期一Sat图,第七个图表示一周中的所有连接,字符串为1和0,表示一周中的哪几天进行了连接。最后一个图形是pajek格式的一个中断,由另一位研究人员编写的单独程序使用 Pajek格式有一个大的标题,然后将连接列为(vertex1 vertex2)无序对。很难将这些对存储

编辑:一开始我试图笼统一点,但结果却含糊不清。我在下面列出了更多细节

我正在编写一个脚本,从两个大型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 )
差不多吧

要点是:

  • 通过每个数据源一次。没有嵌套循环O(n)处理

  • 尽可能少地保留内存,以创建有用的结果

  • “…从两个大型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 )
    
    差不多吧

    要点是:

  • 通过每个数据源一次。没有嵌套循环O(n)处理

  • 尽可能少地保留内存,以创建有用的结果


  • @朗宁:这里有一个重要的教训(我几乎每天都在学习)。尽量避免泛化。细节很重要。@Lonnen:“挖掘和合并”?通过你的脚本或其他应用程序?@Lonnen:这里有一个重要的教训(我几乎每天都在应用)。尽量避免泛化。细节很重要。@Lonnen:“挖掘和合并”?通过您的脚本或其他应用程序?在脚本的早期组合。个人数据的一行输入导致约60行输出,并且由于一些数据未标准化(手动输入),因此需要进行大量的规范化和处理。不过,谢谢你,这非常有帮助。在脚本的早期组合。个人数据的一行输入导致约60行输出,并且由于一些数据未标准化(手动输入),因此需要进行大量的规范化和处理。不过谢谢你,这很有帮助。