如何使用python在csv文件或excel文件中写入输出

如何使用python在csv文件或excel文件中写入输出,python,excel,csv,Python,Excel,Csv,我有一个包含6列的csv文件。这是我正在执行操作的相同数据 16 28-Sep-17 9700 291.8 291.8 9964.4 17 28-Sep-17 9700 186.3 186.3 9872.6 18 28-Sep-17 9700 166.6 166.6 9871.5 24 28-Sep-17 9800 227.5 227.5 9952.2 25 28-Sep-17 9800 202.55

我有一个包含6列的csv文件。这是我正在执行操作的相同数据

16  28-Sep-17   9700    291.8   291.8   9964.4
17  28-Sep-17   9700    186.3   186.3   9872.6
18  28-Sep-17   9700    166.6   166.6   9871.5
24  28-Sep-17   9800    227.5   227.5   9952.2
25  28-Sep-17   9800    202.55  202.55  9916.2
所以我想把TV和TV放到另一个文件中…格式如下所示

9700                             ** 9800**
TV/tv                            **TV/tv**
TV/tv                            **TV/tv**
我确实添加了
writer=writerow()
,除了它之外,其他一切都在奇怪地绘制东西

对于列名,我添加了这个条件
C>21
,其中
C
将在“9700”变为9800时绘制……在此之前,它应该在该列标题下添加数据

我得到这样的输出

9700 
47.65
33.8
53.75
43.95
,,9800
68.2
49
76
62.3
希望你们能理解

import csv

out = open('G:\out1.csv','w') 
with open('G:\outpuop.csv', 'r+') as f:
    reader = csv.reader(f)
    writer = csv.writer(out)
y = list(reader)         
L = len(y)
A = []
M = 0
c = 1

for x in range(1,L):
    if c > 21:
        print float(y[x][2])

        c = 1

    if (float(y[x][2])) > (float(y[x][5])) : 
        if ((float(y[x][4])) != 0 ):
           TV = (float(y[x][4])) - ((float(y[x][2])) - (float(y[x][5])))
           print TV
           M = TV + M
           c = c + 1

           A.append(TV)                  
           writer.writerow(A)

        else:
           TV = (float(y[x][3])) - ((float(y[x][2])) - (float(y[x][5])))
           print TV
           M = TV + M
           c = c + 1
           A.append(TV)                  
           writer.writerow(A)

    else:
        if ((float(y[x][4])) != 0 ):
            tv = (float(y[x][4])) 
            print tv
            M = tv + M
            c = c + 1
            A.append(TV)                  
            writer.writerow(A)

        else:
             tv = (float(y[x][3])) 
             print tv
             M = tv + M
             c = c + 1
             A.append(TV)                  
             writer.writerow(A)

print M 

假设您有一个CSV,它看起来像:

c1、c2、c3、c4、c5、c6
16,28-Sep-179700291.8291.89964.4
17,28-Sep-179700186.3186.39872.6
18,28-Sep-179700166.6166.69871.5
179800227.5227.59952.2年9月24日,28日
25,28-Sep-179800202.55202.559916.2
此脚本将读取中的文件,并基于第三列创建单个列表。然后,它将转换列表,以便数据可以一次写入一行(写入CSV文件时需要):

这将创建一个输出CSV文件,其中包含:

97009800
291.80,227.50
186.30,202.55
166.60,
models
使用列表字典保存
TV
信息。然后,通过首先获取所有字典键的列表并对其进行排序,将其转换为
数据。对于每个键,将创建一个列表,从键名开始,然后附加该键的所有元素。执行此操作时,每个浮点将转换回只有2位小数的字符串


data
现在保存回写文件所需的所有信息,但它是按列顺序排列的。文件需要按行顺序写入。此外,每列可以是不同的长度。解决这个问题的诀窍是使用
izip_longest()
将所有数据以单独的值传递给它(使用
*
)。这具有转换数据的效果,即将列列表转换为行列表。
writerows()
函数可以在一次调用中将所有数据写入输出文件。注意,如果使用正常的
zip()
,它将在列比另一列长时停止
izip_longest()
继续为任何缺少的元素添加
fillvalue
,在本例中为空字符串。

Hey!,欢迎来到堆栈溢出。试着孤立你的问题,写一些容易理解的东西。您的问题涉及我们没有的数据,我们无法看到预期的输出。我推荐阅读:另外,您的写入程序将无法工作,因为文件在
with
块结尾处关闭。@AntonvBR hey用数据解释了…我想要什么…希望我解释得很好…@blakev我将在
with
之后移动该写入程序,但无法获得desire输出。请显示您提供的数据的确切输出。您试图对数据进行什么计算?先生,我正在对该csv文件执行操作,并以symbol
TV
nd
TV
…现在的输出格式类似于9700 47.65 33.8 53.75 43.95 9800 68.2 49 76 62.3,因此希望将其输入到另一个excel或csv文件中,如图所示…对于您给出的数据,我不能理解你的结果。我已经尽我所能地更新了剧本。谢谢先生,感谢它,先生……非常感谢……对我来说似乎很神奇……)谢谢你的解释。非常感谢。
from itertools import izip_longest
from collections import defaultdict
import csv

models = defaultdict(list)

with open('outpuop.csv') as f_input:
    csv_input = csv.reader(f_input)
    header = next(csv_input)

    for row in csv_input:
        # Convert c3 to c6 into floats
        row[2:6] = map(float, row[2:6])

        if row[2] > row[5]:
            if row[4] != 0:
                TV = row[4] - (row[2] - row[5])
                models[row[2]].append(TV)
            else:
                TV = row[3] - (row[2] - row[5])
                models[row[2]].append(TV)
        else:
            tv = row[4]
            models[row[2]].append(tv)


columns = sorted(models.keys())
data = [[int(column)] + ["{:.2f}".format(v) for v in models[column]] for column in columns]

with open('out1.csv', 'wb') as f_output:
    csv_output = csv.writer(f_output)
    csv_output.writerows(izip_longest(*data, fillvalue=''))