尝试使用python

时间:2016-06-01 16:10:01

标签: python csv

我正在寻找一种方法,使用python将第一列从csv复制到空文件中。我正在尝试学习python,所以任何帮助都会很棒!

所以,如果这是test.csv

A 32
D 21
C 2
B 20

我想要这个输出

A
D
C
B

我在python中尝试了以下命令,但输出文件为空

f= open("test.csv",'r')

 import csv

reader = csv.reader(f,delimiter="\t")

names=""

for each_line in reader:

    names=each_line[0]

4 个答案:

答案 0 :(得分:1)

首先,您要打开文件。一个好的做法是使用with语句(从技术上讲,它引入了一个上下文管理器),这样当代码从with块退出时,所有文件都会自动生成关闭

with open('test.csv') as inpfile, open('out.csv', 'w') as outfile:

接下来你想在输入文件的行上有一个循环(注意缩进,我们在with块内),当你读取一个用换行符分隔的行的文本文件时,行分割是自动的......

    for line in inpfile:

每一行都是一个字符串,但你认为它是由空格分隔的两个字段 - 这种情况很常见,字符串有一个方法来处理这种情况(再次注意增加的缩进,我们在for循环块)

        fields = line.split()

默认情况下.split()在空格上分割,但您可以使用,例如split(',')分隔逗号等 - 表示fields是一个字符串列表,供您使用第一个记录它等于['A', '32']并且你想只输出这个列表中的第一个字段...为此目的,一个文件对象有.write()方法,它将字符串,只是一个字符串,写入文件和fields[0]是字符串,但我们必须为其添加换行符,因为在这方面,.write()print()不同。

        outfile.write(fields[0]+'\n')

这就是全部,但如果你省略我的评论,那就是4行代码

with open('test.csv') as inpfile, open('out.csv', 'w') as outfile:
    for line in inpfile:
        fields = line.split()
        outfile.write(fields[0]+'\n')

当你完成学习(某些)Python时,请询问对此的解释......

with open('test.csv') as ifl, open('out.csv', 'w') as ofl:
    ofl.write('\n'.join(line.split()[0] for line in ifl))

附录

这种简单案例中的csv模块增加了

的额外便利性
  1. 将每一行自动拆分为字符串列表
  2. 处理输出细节(换行等)
  3. 在学习Python时,看看如何使用简单的语言完成这些步骤会更有成效,或者至少我认为这样做...

    当您的数据文件很复杂,有标题,引用的字符串可能包含带引号的分隔符等时,情况会有所不同,在这种情况下建议使用csv,因为它会考虑所有的血腥细节。对于复杂的数据分析要求,您将需要标准库中未包含的其他包,例如numpypandas,但这是另一个故事。

答案 1 :(得分:0)

此答案读取CSV文件,了解要由空格字符标记的列。您必须添加header=None,否则第一行将被视为列的标题/名称。

ss是一个切片 - 第0列,占据:表示的所有行

最后一行将切片写入新文件名。

import pandas as pd

df = pd.read_csv('test.csv', sep=' ', header=None)
ss = df.ix[:, 0]
ss.to_csv('new_path.csv', sep=' ', index=False)

答案 2 :(得分:0)

您可以做的最好的事情是创建一个空列表并附加列,然后将该新列表写入另一个csv,例如:

import csv

def writetocsv(l):
#convert the set to the list
b = list(l)
print (b)
with open("newfile.csv",'w',newline='',) as f:
        w = csv.writer(f, delimiter=',')
        for value in b:
             w.writerow([value])

adcb_list = []

f= open("test.csv",'r')
reader = csv.reader(f,delimiter="\t")
for each_line in reader:
              adcb_list.append(each_line)
writetocsv(adcb_list)

希望这适合你: - )

答案 3 :(得分:0)

import csv

reader = csv.reader(open("test.csv","rb"), delimiter='\t')
writer = csv.writer(open("output.csv","wb"))

for e in reader:
    writer.writerow(e[0])