안녕하세요. 현재 python 독학중인 1인입니다.
매번 와서 질문만 늘어놓고 가서 죄송합니다.ㅠㅠ
현재 루프 구문 & 리스트, 데이터 입출력과 관련하여
생각하고 있는 간단한 문제를 풀어보려고 하는데 잘 되지 않아 글을 다시 한번 올리게 되었습니다.
우선 제가 생각하는 것은 엑셀에서 여러개의 x, y좌표를 받아오고 이를 파이썬에서 각각의 리스트화 시키는 것을 생각하고 있습니다.
x,y좌표의 갯수는 받아오는 상황에 따라 달라질 수 있기 때문에 while 구문을 이용하여 해결하려고 합니다.
문제는.. 루프구문 가기도 전에 데이터를 받아와서 리스트화 시키는 것이 만만치 않아 하루종일 고민하다 물어보게 되었습니다.
원본 데이터 파일은 예를 들자면 이런 식입니다.
1.24 \t 3 \n
2.50 \t 3.15 \n
4.24 \t 43.27 \n
이런 식의 데이터가 쭉 있을때
제가 접근하려 했던 방식은
우선 read 를 이용해서 읽고
\t 부분을 공백이나 다른 문자로 치환하고
str 부분을 float 로 바꾸어서 저장을 하면 되지 않을까 생각했습니다.
이를 위해서
# Test f = open("test.txt",'r') Test ="".join(input(str(f.readline()))) Test.replace("\t"," ") Test.split() float(Test[0]) print(Test) f.close()
이런 식의 알고리즘을 구성했습니다.
우선 join을 이용하여 1.24 \t 3 \n 부분을 하나의 문자로 변환시키고
\t 를 빈 공간으로 바꾼 다음 split를 이용해서 공백을 기준으로 데이터를 나눈다면
Test[0]에는 1.24가, Test[1]에는 3이 들어갈 것이라고 생각하였으며
이를 반복문을 통해 만들면 되지 않을까 고민했습니다.
그래서 우선적으로 Test[0]만 불러오려 해보았는데 제 예상과는 다르게
결과값에는 (1.24)가 아닌 (1.24 3)이 나오더라구요
뭔가 알고리즘에 문제가 있거나, 이상한 방식으로 접근이 된 것 같은데 혹시 조언을 좀 구할 수 있을런지요
감사합니다.
Àú¶ó¸é splitÀ» ºóÄ(¡° ¡°)À¸·Î ÇÑÈÄ¿¡ ·çÇÁ·Î Çϳª¾¿ try±¸¹®À¸·Î float½ÃÄѼ º¯È¯ÀÌ µÇ´Â¾Ö´Â ÀúÀåÇÏ°í º¯È¯¾ÈµÇ´Â ¾ÖµéÀº except·Î ´ÙÀ½·çÇÁ·Î µ¹¸®°Ú¾î¿ä.
ÀÌ°Ô ¾îµð¼ À߸øµÇ¾ú´ÂÁö¸¦ ¾Ë¸é ¼öÁ¤À» ÇÒÅÙµ¥ ±×°É ¾Ë ¼ö ¾ø¾î¼ ´ä´äÇÕ´Ï´Ù ¤Ð¤Ð
1. data ÆÄÀÏ (ÇØ´ç ÆÄÀÏÀ» Test.dat·Î ÀúÀåÇß¾î¿ä)
1.34 (ÅÇ) 1
2 (ÅÇ) 2
3.56 (ÅÇ) 4
temp=data.split(" ")
temp2=list()
for i in temp:
try:
temp2.append(float(i))
except:
continue
print(temp2)
4.24 \t 43.27 \n ÀÌ°É ±×³É stringÀ¸·Î ³Ö¾î¼ ó¸®ÇßÀ»¶© º° ¹®Á¦ ¾øÀÌ µ¹¾Æ°¡´Âµ¥
ÆÄÀÏÀ» ¸ø¿Ã¸®½Å´Ù ÇÏ´Ï Àß Á¶ÇÕÇؼ »ç¿ëÇغ¸¼¼¿ä.
# Test
f = open("test.txt",'r')
a = 0
#while a < 4:
Test = f.readline()
print(Test)
Test.split(" ")
list(Test)
print(type(Test))
print(Test)
ÀÔ´Ï´Ù.
ÇØ´ç¹®Á¦´Â ±×³É numpy¸¦ ¾²´Ï±î ¹Ù·Î 󸮰¡ µÇ³×¿ä¤Ð¤Ð
¸ðµâÀÌ ±¦È÷ ÀÖ´Â°Ô ¾Æ´Ï³×¿ä ¤Ð¤Ð
±Ã±ÝÇÑ ºÐµéÀÌ ÀÖÀ»±îºÁ ±Û ³²±é´Ï´Ù.
# Test import
import numpy as nm
i = 0
area = 0
integ = 0
j = 1
csv_data = nm.loadtxt('Test11.csv', delimiter=',')
while i < (len(csv_data)-1):
A = [csv_data[i][0],csv_data[i][1]]
B = [csv_data[j][0],csv_data[j][1]]
area = (B[0]-A[0])*(B[1]+A[1])/2
integ += area
i += 1
j = i + 1
print(integ)