0

私はPython 2.7を実行しています。私はPythonが初めてです。CSV ファイル (値はスペースで区切られています) を読み込んで、座標の上のヘッダーに基づいて内部の値を分離しようとしています。ファイルの形式が慣れていないため、値を正しく読み取ることができません。正しく読めたとしても、リストに入れる方法がわかりません。

CSV ファイルは次のようになります。

# image name
1.png
# probe locations
100 100
200 100
100 200
300 300

# another image name
2.png
100 200
200 100
300 300
135 322

# end

これが私が遊んでいるコードです:

class CommentedFile:
    def __init__(self, f, commentstring="#"):
        self.f = f
        self.commentstring = commentstring
    def next(self):
        line = self.f.next()
        while line.startswith(self.commentstring):
            line = self.f.next()
        return line
    def __iter__(self):
        return self

#I did this in order to ignore the comments in the CSV file

tsv_file = csv.reader(CommentedFile(open("test.exp", "rb")),
                  delimiter=' ')


for row in tsv_file:
    if row != int:
        next(tsv_file)
    if row:
        print row

コードは次のように出力されます。

['100', '100']
['100', '200']
['100', '200']
['300', '300']
Traceback (most recent call last):
  File "the path", line 57, in <module>
next(tsv_file)
StopIteration

そのため、ヘッダーに基づいて座標を分離し、それらを個別のリストに入れるようにプログラムを取得しようとしています。ご協力ありがとうございました!

4

2 に答える 2

0

あなたのコードは実際に私にとってうまくいきました。なぜあなたがトレースバックを取得しているのかわかりません。

tmp.csv

# image name
1.png
# probe locations
100 100
200 100
100 200
300 300

# another image name
2.png
100 200
200 100
300 300
135 322

# end

tmp.py

import csv

class CommentedFile:
    def __init__(self, f, commentstring="#"):
        self.f = f
        self.commentstring = commentstring
    def next(self):
        line = self.f.next()
        while line.startswith(self.commentstring):
            line = self.f.next()
        return line
    def __iter__(self):
        return self

#I did this in order to ignore the comments in the CSV file

tsv_file = csv.reader(CommentedFile(open("tmp.csv", "rb")),
                  delimiter=' ')


for row in tsv_file:
    if row != int:
        next(tsv_file)
    if row:
        print row

シェル出力

tmp$python tmp.py 
['1.png']
['200', '100']
['300', '300']
['2.png']
['200', '100']
['135', '322']
tmp$uname -mprsv
Darwin 12.4.0 Darwin Kernel Version 12.4.0: Wed May  1 17:57:12 PDT 2013; root:xnu-2050.24.15~1/RELEASE_X86_64 x86_64 i386
tmp$python --version
Python 2.7.2
于 2013-06-12T16:14:21.070 に答える
0

パンダを見てください。DataFrameデータを保持し、直感的な方法で操作できるオブジェクトがあります。またread_csv、csvファイルを扱う際の煩わしさを解消する機能も備えています。

例えば:

import pandas as pd

#reads your csv file in and returns a DataFrame object as metioned above. 
df = pd.read_csv("your_csv.csv", sep=' ', names=['co_a','co_b'], header=None, skiprows=2)

#extracts your discordant to separate lists
list1 = df.co_a.to_list()
list2 = df.co_b.to_list()

データフレームとデータの管理方法を使用dfまたは表示できます。df.head()それdf.co_aSeriesオブジェクトであることも言及する価値があります。スーパーリスト/辞書を考えてください。おそらくそこから分析や操作を行うことができます。

また、コメントがcsvファイルにどのように含まれているかを教えていただければ、read_csv.

で答えを探していたことは知っていますがcsv module、これははるかに高度なツールであり、長期的には役立つ可能性があります。

それが役に立てば幸い!

于 2013-06-12T16:11:45.557 に答える