获得一个CSV,我使用以下代码选择500行的随机样本:
for (Map.Entry<String,String> entry : header.entrySet()) {
conn.setRequestProperty(entry.getKey(), entry.getValue());
}
我想要做的是更新一个名为[winner]的列,如果它们存在于样本中,然后将其保存回csv文件,但我不知道如何实现这个...
名为[ID]的列中有唯一标识符。
我该怎么做?
答案 0 :(得分:2)
从看起来像这样的CSV开始:
ID something winner
1 a
2 b
3 c
4 a
5 d
6 a
7 b
8 e
9 f
10 g
您可以使用以下方法。读入整个文件,通过随机选择的索引选择行,并将其写回文件。
import csv
import random
# Read in the data
with open('example.csv', 'r') as infile:
reader = csv.reader(infile)
header = next(reader) # We want the headers, but not as part of the sample
data = []
for row in reader:
data.append(row)
# Find the column called winner
winner_column_index = header.index('winner')
# Pick some random indices which will be used to generate the sample
all_indices = list(range(len(data)))
sampled_indices = random.sample(all_indices, 5)
# Add the winner column to those rows selected
for index in sampled_indices:
data[index][winner_column_index] = 'Winner'
# Write the data back
with open('example_out.csv', 'w', newline='') as outfile:
writer = csv.writer(outfile)
writer.writerow(header) # Make sure we get the headers back in
writer.writerows(data) # Write the rest of the data
这将提供以下输出:
ID something winner
1 a
2 b Winner
3 c
4 a Winner
5 d
6 a Winner
7 b
8 e
9 f Winner
10 g Winner
编辑:事实证明,如果要使用Excel打开,将CSV的第一列称为ID
并不是一个好主意。然后它错误地认为该文件是SYLK格式。
答案 1 :(得分:0)
首先,你为什么使用csv而不是数据库?即使是一个sqlite也会容易得多(内置 - import sqlite3
)
其次,您需要再次编写整个文件。我建议你使用你的行作为列表并只更新它们(列表就像指针一样,你可以改变内部值,它会更新)
lines=[list(line) for line in source]
然后
for choice in random_choice:
choice[WINNER_INDEX]+=1
并编写文件