簡體   English   中英

如何使用Python對CSV文件進行排序(3)

[英]How to sort this CSV file using Python (3)

我到處找了一些教程,但由於排序真的很奇怪,仍然無法提出任何方法來對該文件進行排序!

該文件的格式為:(其中x是數字,y是日期,z是時間,b是數字)

x x x x x
y y y y y
z z z z z
b b b b b

實際上每行有50個條目,但這是文件的極其簡化的版本。

我正在努力做的是對每個條目進行排序,使其為[x,y,z,b]

到目前為止,我只想將每一行分成一個列表,但這顯然不是我需要做的,因此我陷入了困境。

import csv

with open('sample.txt') as csvfile:
    readCSV = csv.reader(csvfile, delimiter=' ')
    for row in readCSV:
        print(row)

Numpy的移調就是您要尋找的,即

from csv import reader
from numpy import transpose
file = open("file.dat")
results = reader(file, delimiter=' ')

print(transpose(list(results)))

這將打開您擁有的具有原始值的任何test.txt文件,逐行通過並構造一個轉置的數組。 然后,對它們進行迭代,並按您要求的順序以及csv將它們打印到newText.txt中。 不知道你想要更多:)。

import csv

newLine = []
newArr = []

x = 0

with open ('text.txt', 'r') as f:
    end = len(f.readline().replace(' ',''))
    f.seek(0)
    while x <= end:
        for line in f:
        newLine.append(line.split(" ")[x])
        newArr.append(newLine)
    x += 1

# outputs a text file
with open ('newText.txt', 'wb') as newf:
    for line in newArr:
        newf.write(' '.join(line) + '\n')

# outputs a csv file
with open('text.csv', 'wb') as csvfile:
    writeCSV = csv.writer(csvfile)
    for line in newArr:
        writeCSV.writerow(''.join(line))

排序文件:

x1  x2  x3  x4  x5
y   y   y   y   y
z   z   z   z   z
b   b   b   b   b

程序:

import csv

with open("C:\\Users\\sortfile.csv", 'r') as fopen:
    rows = csv.reader(fopen)
    csvf = list(rows)

x = 0
array = []

while True:
    lines = []
    try:
        for i in csvf:
            lines.append(i[x])
        array.append(lines)
        x +=1
    except IndexError:
        break

結果:

[['x1', 'y', 'z', 'b'], ['x2', 'y', 'z', 'b'], ['x3', 'y', 'z', 'b'], ['x4', 'y', 'z', 'b'], ['x5', 'y', 'z', 'b']]

希望我能正確理解您的問題。

鑒於:

$ cat so.csv
x1,x2,x3,x4,x5
y1,y2,y3,y4,y5
z1,z2,z3,z4,z5
b1,b2,b3,b4,b5

您通常會像這樣逐行讀取文件:

import csv

LoL=[]
with open(fn) as f:
    for row in csv.reader(f):
        LoL.append(row)

或者,更緊湊地說:

LoT=[row for row in csv.reader(f)]

>>> LoL
[['x1', 'x2', 'x3', 'x4', 'x5'], ['y1', 'y2', 'y3', 'y4', 'y5'], ['z1', 'z2', 'z3', 'z4', 'z5'], ['b1', 'b2', 'b3', 'b4', 'b5']]

您可以使用zip進行轉置:

with open(fn) as f:
    LoT=[row for row in zip(*csv.reader(f))]

>>> LoT
[('x1', 'y1', 'z1', 'b1'), ('x2', 'y2', 'z2', 'b2'), ('x3', 'y3', 'z3', 'b3'), ('x4', 'y4', 'z4', 'b4'), ('x5', 'y5', 'z5', 'b5')]

然后,您可以根據需要將元組的轉置列表寫入新的csv或進程。

暫無
暫無

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

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