import csv
n = int(input("How many records ?"))
b = 0
for i in range(n):
s = input("what is the name of the student ")
g = input(" grade ?")
k.append(s),k.append(g)
print("res",'[%s]'%', '.join(map(str, k)))
StuGrade = "StuGrade.csv"
with open(StuGrade, 'w' ) as f :
thewriter = csv.writer(f)
thewriter.writerow( k[0])
for i in range(n*2-1) :
b=b+1
thewriter.writerow( k[b])
Это вывод моей программы:
How many records 1 what is the name of the student ahmad grade ? 3 res [ahmad , 3]
CSV-файл выглядит так:
a,h,m,a,d,
,3
Я хочу так:
ahmad
3
csv.writerow()
принимает список значений для этой строки — вы предоставляете отдельные значения. Строки являются итерируемыми — если вы дадите одну строку csv.writerow()
, она будет использовать каждую букву как 1 столбец. Вы можете исправить это, предоставив его как список из 1 элемента:
thewriter.writerow( [ k[b] ] ) # 1 element list
Чтобы правильно написать csv (с одним или несколькими значениями в строке и несколькими строками), вам не хватает newline=""
при открытии файла (это хорошо задокументировано), чтобы правильно создать файл csv - отсутствие этого вводит пустую строку в ваш текущий вывод .
with open(StuGrade, 'w', newline = "") as f : # add newline = ""
Вам действительно не нужен модуль записи csv для создания файла с 1 вещью в строке:
with open("file.txt","w") as f:
for word in k: # dont use index iterating, use element itering
f.write(word + "\n")
сделал бы это.
Fix/Demo для 2 значений в строке:
import csv
k = ["ABC","5", "BCD","7", "CDE","42"]
StuGrade = "StuGrade.csv"
with open(StuGrade, 'w', newline = "") as f : # added newline
thewriter = csv.writer(f)
# go over the range of input indexes and increase by 2
for idx in range(0, len(k), 2):
# slice and write 2 values as 2 columns from your k list at once
thewriter.writerow( k[idx : idx+2])
print(open("StuGrade.csv").read())
Выход:
ABC,5
BCD,7
CDE,42
@ahmad для 1 элемента в строке не используйте csv - вместо этого используйте
with open("file.txt","w") as f: for word in k: f.write(word + "\n")
- или используйтеthewriter.writerow( [ k[b] ] )
, если у вас есть задание, вынуждающее вас использоватьcsv