Gå til innhold

[Løst] [Python] Substrahere kolonner - csv modul


Anbefalte innlegg

Hei igjen!

 

Hvis jeg nå har seks kolonner, skilt med tabulator der jeg vil substrahere den 3 kolonna med den 5, og den 4 kolonna med den 6, har jeg forstått at det er en csv modul som er best..

 

Denne koden har ikke jeg lagd, men er vel en pekepinn på hva jeg trenger.

 

   import csv

   with open('input', 'rb') as fd:
   reader=csv.reader(fd,delimiter='\t')
   for row in reader:

 

Jeg har prøvd å definere en del ting i "for" løkka, men kommer til kort. Prøver å definere feks, kol1 = row[3] - row[5], men det gir bare errors.

 

Noen råd?

 

På forhånd takk

Lenke til kommentar
Videoannonse
Annonse

Hei!

 

Fint hvis du gir litt info om hvilken error det er, men jeg kan tenke meg at det kanskje er "TypeError: unsupported operand type(s) for -: 'str' and 'str'" ? isåfall kan du konvertere row[x] til et heltall (int) ved å bruke int(row[x])..

 

import csv

with open('test.txt', 'rb') as fd:

reader=csv.reader(fd,delimiter='\t')

for row in reader:

print int(row[1]) - int(row[3])

Lenke til kommentar

Når du leser fra en fil,er det string output.

Viss du skal bruke tallene til og kalkulere,må du gjøre om til integer eller float.

Som vist av @The_Viper@EFNET(husk code tag)

import csv

result = []
with open('num.txt') as f:
   reader = csv.reader(f,delimiter='\t')
   for row in reader:
       kol = [int(i) for i in row]
       result.append(kol[1] - kol[3])

print sum(result)

Lenke til kommentar

Når du leser fra en fil,er det string output.

Viss du skal bruke tallene til og kalkulere,må du gjøre om til integer eller float.

Som vist av @The_Viper@EFNET(husk code tag)

import csv

result = []
with open('num.txt') as f:
   reader = csv.reader(f,delimiter='\t')
   for row in reader:
       kol = [int(i) for i in row]
       result.append(kol[1] - kol[3])

print sum(result)

 

Hei, tusen takk for svar. Jeg fikk syntax error da jeg copy/paste'a teksten din.. Jeg vil gjerne ha programmet til å skrive til en resultatfil, men her får jeg noe krøll.

 

import csv

result = []
with open ('convert.txt') as f:
   with open('res.txt', 'w') as f_out:
       reader = csv.reader(f,delimiter='\t')
   for row in reader:
       kol = [int(i) for i in row]
       result.append(kol[1] - kol[3], kol[2] - kol[4])
       f_out.write(sum(result))

 

Det beste egentlig, hadde vært om programmet kunne "sniffe" seg frem til en spesiell filendelse i mappa den er i, og bare gjort den samme kalkulasjonen, men det er kanskje ikke så lett?

 

Uansett, meldingen jeg får i IDLE er : ValueError: invalid literal for int() with base 10:

 

Skjønner som vanlig mindre enn minst.

Lenke til kommentar

num.txt

1	2	3
1	2	3
1	2	3

import csv

result = []
with open('num.txt') as f:
   reader = csv.reader(f,delimiter='\t')
   for row in reader:
       kol = [int(i) for i in row]
       result.append(kol[1] + kol[2])

with open('new.txt', 'w') as f_out:
   f_out.write(str(sum(result)))

Når du leser eller skiver til en fil er det datatype string som brukes.

I dette eksp skrives 15 til new.txt

Det beste egentlig, hadde vært om programmet kunne "sniffe" seg frem til en spesiell filendelse i mappa den er i, og bare gjort den samme kalkulasjonen, men det er kanskje ikke så lett?

Alt kan være vansklig viss de grunnleggende kunnskapene ikke er så gode.

Oppgaven er rimlig greit,men at noen andre skiver en ferdig løsning lærer man ikke så mye av.

 

Du spørte om bøker i en annen post her er noen greie.

http://www.amazon.com/Beginning-Python-Novice-Professional-ebook/dp/B001FA0HNY/ref=sr_1_16?ie=UTF8&qid=1314654328&sr=8-16

http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ref=sr_1_7?ie=UTF8&qid=1314654328&sr=8-7

http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ref=sr_1_8?ie=UTF8&qid=1314654328&sr=8-8

Jeg postet en del linker i denne posten.

https://www.diskusjon.no/index.php?showtopic=1288152

Endret av SNIPPSAT
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...