簡體   English   中英

加入csv文件中的第4行

[英]joining every 4th line in csv-file

我想將每4行加入一起,所以我認為這樣的方法會起作用:

import csv

filename = "mycsv.csv"
f = open(filename, "rb")

new_csv = []
count = 1

for i, line in enumerate(file(filename)):
    line = line.rstrip()
    print line
    if count % 4 == 0:
        new_csv.append(old_line_1 + old_line_2 + old_line_3+line)
    else:
        old_line_1 = line[i-2]
        old_line_2 = line[i-1]
        old_line_3 = line
    count += 1

print new_csv

但是line[i-1]line[i-2]並不像我想的那樣采用當前的-1和-2。 那么,如何訪問當前的-1和-2行?

這應該按照您的要求進行

join_every_n = 4
all_lines = [line.rstrip() for line in file(filename)]  # note the OP uses some unknown func `file` here
transposed_lines = zip(*[all_lines[n::join_every_n] for n in range(join_every_n)])
joined = [''.join([l1,l2,l3,l4]) for (l1,l2,l3,l4) in transposed_lines]

同樣,你也可以

joined = map(''.join, transposed_lines)

說明

這將返回your_list每個第i個元素,其偏移量為n

your_list[n::i]

然后,您可以將其跨range(4)組合以為列表中的每4行生成一次,從而得到

[[line0, line3, ...], [line1, line4, ...], [line2, line6, ...], [line3, line7, ...]]

然后transposed_lines是必需的以便它變得像轉置該數組

[[line0, line1, line2, line3], [line4, line5, line6, line7], ...]

現在,您可以簡單地解壓縮並加入每個單獨的列表元素

all_lines = map(str, range(100))
transposed_lines = zip(*[all_lines[n::4] for n in range(4)])
joined = [''.join([l1,l2,l3,l4]) for (l1,l2,l3,l4) in transposed_lines]

['0123',
 '4567',
 '891011',
...

變量line僅包含當前迭代的行,因此訪問line[i-1]將僅在當前行中給您一個字符。 另一個答案可能是放置它的最好方法,但是,在代碼的基礎上,您可以執行以下操作:

import csv

filename = "mycsv.csv"
with open(filename, "rb") as f:
    reader = csv.reader(f)
    new_csv = []
    lines = []
    for i, line in enumerate(reader):
        line = line.rstrip()
        lines.append(line)
        if (i + 1) % 4 == 0:
            new_csv.append("".join(lines))
            lines = []

print new_csv

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM