我正在寻找一种方法,使用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]
答案 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
模块增加了
在学习Python时,看看如何使用简单的语言完成这些步骤会更有成效,或者至少我认为这样做...
当您的数据文件很复杂,有标题,引用的字符串可能包含带引号的分隔符等时,情况会有所不同,在这种情况下建议使用csv
,因为它会考虑所有的血腥细节。对于复杂的数据分析要求,您将需要标准库中未包含的其他包,例如numpy
和pandas
,但这是另一个故事。
答案 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])