我正在嘗試在 python 中構建一個票務系統,輸出應逐列讀取檔案。但是,該程式誤讀了這些列。任何幫助將不勝感激。謝謝
這是預期的輸出:
Name Age Sex
as 12 f
qw 13 m
Total Tickets: 2
這是當前的輸出:
Name Age Sex
as qw
12 13
f m
Total Tickets: 2
我正在嘗試創建并寫入一個 csv 檔案,然后從中讀取。但是,如上面的輸出所示,我得到了與所需輸出相反的結果
代碼如下:
import sys, select, os, csv
from os import system
with open(input("\nInput file name with .csv extension: "), 'r', newline = '') as f:
fileDir = os.path.dirname(os.path.realpath('__file__'))
reader = csv.reader(f, delimiter = '\t')
header_row = next(reader)
# Can use the 2 lines below to check indices of headers
# name = [0], age = [1], sex = [2]
# for index, column_header in enumerate(header_row):
# print(index, column_header)
name_l = []
age_l = []
sex_l = []
total_tickets = 0
for row in reader:
name = str(row[0])
name_l.append(name)
age = str(row[1])
age_l.append(age)
sex = str(row[2])
sex_l.append(sex)
total_tickets = 1
print('\t'.join(header_row))
print('\t'.join(name_l))
print('\t'.join(age_l))
print('\t'.join(sex_l))
print("\nTotal Tickets: ", total_tickets)
uj5u.com熱心網友回復:
好吧,我自己設法弄明白了。所以新的代碼如下:
import sys, select, os, csv
from os import system
with open(input("\nInput file name with .csv extension: "), 'r', newline = '') as f:
fileDir = os.path.dirname(os.path.realpath('__file__'))
reader = csv.reader(f, delimiter = '\t')
header_row = next(reader)
print('\t'.join(header_row))
# Can use the 2 lines below to check indices of headers
# name = [0], age = [1], sex = [2]
# for index, column_header in enumerate(header_row):
# print(index, column_header)
name_l = []
age_l = []
sex_l = []
total_tickets = 0
for row in reader:
name = str(row[0])
name_l.append(name)
age = str(row[1])
age_l.append(age)
sex = str(row[2])
sex_l.append(sex)
total_tickets = 1
print('\t'.join(row))
print("\nTotal Tickets: ", total_tickets)
uj5u.com熱心網友回復:
我看到您執行了一些不必要的步驟,甚至造成了導致您的原始問題的混亂。
這是一個要求用戶輸入,讀入并計算行數,然后寫出所有內容的最小示例:
import csv
import sys
fname = input('\nInput file name with .tsv extension: ')
total_tickets = 0
rows = []
with open(fname, newline='') as f:
reader = csv.reader(f, delimiter='\t')
rows.append(next(reader)) # read and add header
for row in reader:
rows.append(row)
total_tickets = 1
writer = csv.writer(sys.stdout, delimiter='\t')
writer.writerows(rows)
print(f'\nTotal tickets: {total_tickets}')
這是我運行的:
% python3 so.py
Input file name with .tsv extension: so.tsv
Name Age Sex
as 12 f
qw 13 m
Total tickets: 2
最大的收獲是,您可以完全避免以下兩個步驟:
字串轉換所有單元格是多余的,它是文本輸入和文本輸出;如果您只想傳遞資料,只需將整行附加到
rows,因為...正如您所見,手動撰寫行可能很棘手,并且
csv.writer可以為您完成
我查看了回答這個問題的 Python 檔案,我可以看到沒有完整的示例來讀取、處理和寫出表格資料,所以我可以看到您是如何想到自己撰寫行的。
此外,我從未見過newline='',并且一直在撓頭,直到我看到檔案提到這就是這樣做的方法......學到了一些新東西,謝謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/329876.html
上一篇:Xamarin中的Auth0登錄
