将数据拆分为多个文件:如何处理(未知数量的)多个连接

2024-09-24 22:28:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将一个(在现实生活中:巨大的)文件分割成多个文件,这些文件由数据中的第二列指定。例如,在下面的例子中,我需要文件431.csvrr1.csv。 我的主要想法是打开新的连接,如果还没有打开的话就写——dictfiles_dict中有一个打开连接的记录,然后遍历这个记录,最后关闭。你知道吗

我陷入了如何逐行引用这些连接的困境。你知道吗

在现实生活中,这些文件名(第二列)的数量和值事先是未知的。你知道吗

在这里找到了一些灵感:

write multiple files at a time

python inserting variable string as file name

How can I split a text file into multiple text files using python?

玩具数据在data_in中的内容:

123,431,t
43,rr1,3
13,rr1,43
123,rr1,4

我的幼稚伪代码到现在为止:

files_dict = dict() #dict of file names

with open(data_in) as fi:
    for line in fi:
        x = line.split(',')[1]

        if x not in files_dict:
            fo = x + '.csv'
            files_dict[x] = fo

            '''
            open files_dict[x]
            write line to files_dict[x]

            '''
    else:
        '''
        write line to files_dict[x]
        '''

for fo in files_dict.fos:
    fo.close()

Tags: 文件csv数据inas记录linefiles
3条回答

file对象本身放入字典,而不是文件名。你知道吗

files_dict = {}

with open(data_in) as fi:
    for line in fi:
        x = line.split(',')[1]

        if x not in files_dict:
            fo = open(x + '.csv', "w")
            files_dict[x] = fo
        else:
            fo = files_dict[x]

        fo.write(x)

for fo in files_dict.values():
    fo.close()

您的想法是正确的,但是应该在dict中存储文件对象而不是文件名,并且不需要else块(应该与if而不是for对齐):

files_dict = {}

with open(data_in) as fi:
    for line in fi:
        x = line.split(',')[1]
        if x not in files_dict:
            files_dict[x] = open(x + '.csv', 'w')
        files_dict[x].write(line)

for file in files_dict.values():
    file.close()

您也可以将pandas用于您的大型csv,因为它可以很好地处理它,然后只需遍历pandas列:

df = pd.read_csv('fun.txt', header=None)

string = "tester string"

for row in df[1]:
    fo = row + '.csv'
    f = open(fo, 'a')
    f.write(string+'\n')
    f.close()

输出为2个文件,431.csv和rr1.csv。 431.csv的内容:

tester string

rr1.csv的内容:

tester string
tester string
tester string

它会将任何添加的信息附加到重复文件中,我觉得这是基于伪代码的理想行为。这是一个很好的解决方案,因为它将在循环遍历列时打开和关闭您的文件。这样你就不会同时打开50个文件,这会给你的操作系统带来麻烦。你知道吗

相关问题 更多 >