저는 코딩에 익숙하지 않아 프로그램 사용자의 입력을 다른 줄의 csv 파일로 설정하는 방법을 모릅니다. 현재하는 일은 모두 한 줄에 인쇄하는 것이므로 유용하지 않습니다. 어떤 도움을 주시면 감사하겠습니다. 또한 코드 품질이 좋지 않아 죄송합니다. 최대한 빨리 배우고 있습니다!
코드는 다음과 같습니다.
import csv
def filecreator():
print("----------INPUT--DATA----------")
filename = input("File Name: ")
print("A file has been created named",filename,".csv")
print("-------------------------------")
with open(filename+".csv", 'w', newline='') as csvfile:
w = csv.writer(csvfile, delimiter=',')
save = "y"
while save == "y":
device = input("Source of data: ")
time_of_data_collection = ("When: ")
first_data_set = input("Column 3 Title: ")
second_data_set = input("Column 4 Title: ")
#Here is where I want to have the break for it to be printed on a
#second line
drone = int(input("Drone Number: "))
time = int(input("Time: "))
temperature = input("Enter temperature: ")
windspeed = input("Enter windspeed: ")
save = input("Would you like to save? Y/N: ")
if save.lower() == "y":
w.writerow([drone, time, temperature, windspeed])
print("---Your data has been saved---")
print("Program closed.")
def viewdata():
print("----VIEW-DATA----")
filename = input("File Name: ")
print("-----------------")
f = open(filename)
csv_f = csv.reader(f)
for row in csv_f:
print (row)
print("-----------------")
userinput = input("Enter I to input data, V to view data or C to do calculations: ")
if userinput in ("I", "i"):
print("\nYou have chosen to input weather data to the program")
filecreator()
elif userinput=="V" or "v":
print("\nYou have chosen to view weather data.")
viewdata()
elif userinput=="C" or "c":
print("\nYou have chosen to perform calculations with weather data.")
수집 된 데이터 위에 헤더 열을 설정하려면 데이터를 요청 하는 루프 전에 요청하고 w.writerow([drone_header, time_header, temperature_header, windspeed_header])
대신 열 헤더 정보 포함을 사용하여 데이터 항목에 대해 수행하는 것과 동일한 방식으로 작성합니다 .
에 대한 각 호출 csv_writer.writerow( [...] )
은 한 줄을 작성합니다. csv_writer.writerows( [ [...], [...], [...], ... )
목록 목록 을 사용 하고 제공 하면 모든 데이터를 한 번에 쓸 수 있습니다. 각 내부 목록은 한 행의 데이터를 나타냅니다.
여기에서 더 많은 것을 읽으십시오 :
여전히 수정해야 할 다른 사항이 많이 있습니다.
elif userinput=="V" or "v":
과 elif userinput=="C" or "c":
다음과 같이 수정할 수 있습니다.
import csv
def get_int(text, positive_only = True):
"""Handles input for valid (maybe positive only) integers"""
while True:
try:
i = input(text)
v = int(i)
if positive_only and v < 0:
raise ValueError()
return v
except ValueError:
print(f"You need to input a {'non negative ' if positive_only else ''}number")
def filecreator():
print("----------INPUT--DATA----------")
filename = input("File Name: ")
# fix the filename for good and force a .csv extension
if not filename.endswith(".csv"):
filename += ".csv"
print("Will use ",filename, "to store data.")
print("-------------------------------")
# ask headers (INPUT)
headers = []
while not headers:
try:
headerinput = input("Please enter column headers.They are used as heade for:\n\tdevice, time, data1 (Temperature), data2 (Windspeed)\nInput all comma seperated in one line (): ")
device_header,time_header, data1_header, data2_header = [h.strip() for h in headerinput.split(",") if h.strip()]
except (ValueError, IndexError):
continue
headers = [device_header,time_header, data1_header, data2_header]
# store all datapoinst in a list and write only once afterwards
data = []
while True:
print("Data input:")
drone = get_int(f"Drone Number ({device_header}):")
time = get_int(f"Time ({time_header}):") # time as integer?
temperature = input(f"Enter temperature ({data1_header}):")
windspeed = input(f"Enter windspeed ({data2_header}): ")
data.append([drone,time,temperature,windspeed])
save = input("Continue data entry? [Y/N]").lower().strip()
if save == "n":
break
# not much of (PROCESSING) done with the data so ... empty
# write file (OUTPUT)
with open(filename, "w", newline ="") as csvfile:
w = csv.writer(csvfile, delimiter=',')
w.writerow(headers)
w.writerows(data)
print("---Your data has been saved---")
print("Program closed.")
def viewdata():
print("----VIEW-DATA----")
filename = input("File Name: ")
print("-----------------")
with open(filename) as f:
csv_f = csv.reader(f)
for row in csv_f:
print (row)
print("-----------------")
userinput = input("Enter I to input data, V to view data or C to do calculations: ").strip().lower()
if userinput == "i":
print("\nYou have chosen to input weather data to the program")
filecreator()
elif userinput=="v":
print("\nYou have chosen to view weather data.")
viewdata()
elif userinput=="c":
print("\nYou have chosen to perform calculations with weather data.")
else:
print ("\nWrong input.")
화면 출력 :
Enter I to input data, V to view data or C to do calculations: i
You have chosen to input weather data to the program
----------INPUT--DATA----------
File Name: aa
Will use aa.csv to store data.
-------------------------------
Please enter column headers.They are used as heade for:
device, time, data1 (Temperature), data2 (Windspeed)
Input all comma seperated in one line (): drone,time,data1,data2
Data input:
Drone Number (drone):42
Time (time):0815
Enter temperature (data1):hot
Enter windspeed (data2): breeze
Continue data entry? [Y/N]y
Data input:
Drone Number (drone):11
Time (time):9999
Enter temperature (data1):boiling
Enter windspeed (data2): hurricane
Continue data entry? [Y/N]n
---Your data has been saved---
Program closed.
생성 된 파일 :
drone,time,data1,data2
42,815,hot,breeze
11,9999,boiling,hurricane
읽고주의해야 할 기타 사항 :
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다