Anfänger Frage zu csv Modul

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

Dienstag 5. Juni 2007, 16:03

Hallo!

Ich bin immer noch dabei mein erstes Programm auszubauen und brauch mal wieder Hilfe :roll:
Ich möchte Excel Daten bearbeiten (lesen und schreiben) und habe diesen Bsp. Code in der Dok. gefunden:

Code: Alles auswählen

import csv
reader = csv.reader(open("some.csv", "rb"))
for row in reader:
    print row

Leider sind für mich 2 Sachen unklar :roll:

1. Wie findet Python das File some.csv oder anderst gefragt wie geb ich den Fileort an?
2. Was bedeutet das "rb"?


Ich hoffe jemand kann helfen :wink:

Liebe Grüsse
ete
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Dienstag 5. Juni 2007, 16:27

rb bedeutet "read binary". Mehr dazu findest du in der Doku ;)
http://docs.python.org/lib/built-in-funcs.html oder einfach "pydoc open".

Das File wird im derzeitigen Ordner gesucht (Current Working Directory).
Du kannst aber auch einen absoluten Pfad angeben:
open("/home/veers/test","rb")
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

Dienstag 5. Juni 2007, 16:30

Danke, so kann ich gleich weiter probieren :D
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

Mittwoch 6. Juni 2007, 14:12

Hallo nochmal!

Soweit komm ich klar nur wenn ich mit den Daten weiterrechnen möchte bekomm ich immer 0 raus... Hier mal der Code:

Code: Alles auswählen

import os
import csv

os.chdir("C:\Dokumente und Einstellungen\Stefanie\Desktop")

reader = csv.reader(open("test.csv", "rb"))
for row in reader:
  
    t = row.count("t"))
    a = row.count("a")
    g = row.count("g")
    c = row.count("c")
    
    Tm01 = (2*(a+t)) + (4*(g+c))
    
    print t,a,g,c,Tm01
Excel File sieht z.B. so aus (Zeile A1:A3):

CTG GTG GTC GGA GGC GGA AGC
GCA TTT GAA GCT TCC GCC TCC GAC
GCT GTG CAG CTC CAA AAA GAG ATG TCA C


Wenn ich row in int umwandle hab ich dasselbe Ergebnis...Aber vervielfältigen kann ich (z.B. 2*row).

Wo liegt der Fehler :?:
BlackJack

Mittwoch 6. Juni 2007, 14:31

Schau Dir doch mal mit ``print row`` und ``print type(row)`` an was Du da bekommst. Das ist eine CSV-Datei und keine Textdatei, also macht es keinen Sinn wenn `row` eine Zeichenkette wäre.

Edit: Ich bezweifle übrigens ganz stark, dass ein ``int(row)`` ohne Fehler durchgeht.
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

Mittwoch 6. Juni 2007, 15:17

Ok, das type(row) hatte ich auch schon überprüft aber wusste dann nicht weiter...

Gibt es denn irgendwo eine Liste mit allen Funktionen, z.B. wie ich eine einzelne Zelle oder Bereich anspreche? Das find ich in der Doku nämlich nicht.
Irgendwie weiss ich halt nicht, was alles möglich ist mit dem csv Modul und komm deswegen nicht weiter...

lg
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Mittwoch 6. Juni 2007, 15:25

Kennst du dir() und help() schon? ;)
BlackJack

Mittwoch 6. Juni 2007, 15:28

``type(row)`` sollte Dir verraten, dass es sich um ein Tupel handelt. Das hat dann nichts mehr speziell mit dem `csv`-Modul zu tun, Tupel ist einer der eingebauten Grunddatentypen. Zugriff auf einzelne Elemente und Bereiche funktioniert wie bei Listen über Index oder "Slices".

Code: Alles auswählen

In [73]: row = ('a', 'b', 'c')

In [74]: row[0]
Out[74]: 'a'

In [75]: row[-1]
Out[75]: 'c'

In [76]: row[1:]
Out[76]: ('b', 'c')
Was Du auch immer machen kannst, ist ein ``print dir(obj)`` und in der Python-Shell ``help(obj)`` um mehr über ein bestimmtes konkretes Objekt zu erfahren.

Code: Alles auswählen

In [77]: dir(row)
Out[77]:
['__add__',
 '__class__',
 '__contains__',
 '__delattr__',
 '__doc__',
 '__eq__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__getnewargs__',
 '__getslice__',
 '__gt__',
 '__hash__',
 '__init__',
 '__iter__',
 '__le__',
 '__len__',
 '__lt__',
 '__mul__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__rmul__',
 '__setattr__',
 '__str__']
So ein Tupel hat also nur "magische" Methoden.

Code: Alles auswählen

In [78]: help(row)
Help on tuple object:

class tuple(object)
 |  tuple() -> an empty tuple
 |  tuple(sequence) -> tuple initialized from sequence's items
 |
 |  If the argument is a tuple, the return value is the same object.
 |
 |  Methods defined here:
 |
 |  __add__(...)
 |      x.__add__(y) <==> x+y
 |
 |  __contains__(...)
 |      x.__contains__(y) <==> y in x
 |
 |  __eq__(...)
 |      x.__eq__(y) <==> x==y
 |
 |  __ge__(...)
 |      x.__ge__(y) <==> x>=y
...
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

Mittwoch 6. Juni 2007, 15:39

Aha, ok jetzt hats klick gemacht...

Naja, Rom wurd auch nicht an einem Tag erbaut, so langsam taste ich mich vowärts :oops:

Vielen Dank für eure Hilfe!

ete
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

Freitag 8. Juni 2007, 11:24

Ich hab mich jetzt ein ein Beispiel aus dem Forum gehalten, da ich mit dem csv modul nicht weiterkam.

Das sieht jetzt so aus:

Code: Alles auswählen

import win32com 
import win32com.client 
from win32com.client import Dispatch 

xlApp = Dispatch("Excel.Application") 
xlApp.Workbooks.Open("C:\Dokumente und Einstellungen\Stefanie\Desktop/test.xls") 
xlApp.Visible = 1 

def ReturnValue(StartRange,EndRange): 
    ws = xlApp.ActiveSheet 
    return ws.Range(StartRange,EndRange) 

Daten = ReturnValue("A1","A3")

sequenz = str(Daten)

t = sequenz.count("t")
a = sequenz.count("a")
g = sequenz.count("g")
c = sequenz.count("c")


for item in range(0,len(Daten)):
   
    print Daten[item],t,a,g,c

xlApp.ActiveWorkbook.Close(SaveChanges=1) 
xlApp.Quit() 
xlApp.Visible = 0 
del xlApp 
Dies funktioniert auch aber ich zähle jetzt alle Buchstaben des ganzen Bereiches. Wie kann ich das für jede Zelle umsetzen?
Antworten