在Python中从列表写入.csv文件

1 投票
3 回答
2177 浏览
提问于 2025-04-16 19:55

我有一个.txt文件,从中提取出一个列表,在Python控制台上看起来像这样:

92007
92011
92014
92024
1;
92058
92067
92075
92083
2;

现在我需要把这个列表放到一个.csv文件里,所有在“1;”后面的数字都归为“1”组,而在“2;”后面的数字都归为“2”组。换句话说,Excel文件里应该有一列是五位数的数字,另一列是对应的组号。

我已经在Excel里创建了.csv文件,但它现在是空的。有什么建议吗?

3 个回答

0
import csv

f = open("input.txt", "r")
o = open("output.csv", "wb")
csvo = csv.writer(o)

inputText = f.read().split(";")
f.close()

for block in inputText:
    row = data.split("\n")
    idNo = row[-1]
    numbers = ""
    for line in row[:-1]:
        numbers += line +"\n"
    numbers.strip("\n")
    csvo.writerow([idNo, numbers])


o.flush()
o.close()

这个脚本的作用是使用分号作为分隔符,把数据分成几组。接着,它会按行分割这些数据,得到一串5位数的数字,以及最后的组号。它会把列表中的最后一个数字放到第一列,其他的数字则放到第二列,用换行符分隔开。

希望这对你有帮助

0

这个页面提供了一个详细的概述:http://docs.python.org/library/csv.html

而在这个页面上,它给了你一个简单的例子:http://www.answermysearches.com/list-to-csv-in-10-seconds-python-csv-module-quick-reference/120/

2
full = {}
arr = []

with open('numbers.txt', 'r') as nums:
    while True:
        read = nums.readline()
        if len(read) > 0:
            if len(read) == 6:
                read = read[:5]
                arr.append(read)
            elif len(read) < 6:
                read = read[0]
                full[read] = arr
                arr = []
        else:
            break

with open('numbers.csv', 'w') as csv:
    for i in full:
        for j in full[i]:
            line = str(j) + ',' + str(i) + '\n'
            csv.write(line)

这个文件可以读取一个文本文件(我把你上面发的内容复制了一遍并保存为文本文件),然后按照你描述的方式把它输出为一个.csv文件。

抱歉没有写很多注释,我做得比较快。如果你想修改什么地方但不明白,可以随时问我,我会解释的。

另外,现在这个程序只能处理一位数的组号。如果要处理最多四位数的组号,可以做以下修改(显然,五位数会出问题,因为它无法区分组号和它包含的元素):

把这一行

read = read[0]

改成

read = read[0:len(read)-2]

这样就可以了。不过要注意,它现在是按字母顺序排列的,而不是按数字顺序,所以会变成11, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9。

撰写回答