0

I am able to plot from a simple csv like this using matplot:

1  2
2  4
3  8
4  16
5  32
.
.

The values are seperated by tab. Now I need to read the data from a csv which looks like this:

    #  Name Test Number1                                      \\Name of the csv
#Sometimes there is a comment which has one line
# or even more

    Category1  Number2  Test  Temperature  Voltage            \\Labels for the plot
    # [1]  [1/min]  [s]  [°C]  [mV]                           \\Units
    MinMax  2.3  5  9  48  22                                 \\Data starts here
    MinMax  9.87  6.01  8  9  3
    MinMax  1  2  3  4  5
    MinMax  99.52  5  8  6.66  0

How can I get the data from my csv and the Labels for the plots? For example if I want to plot Test and Temperature? Thereis a huge amount of rows and columns.

Thank you!

6
  • Duplicate of stackoverflow.com/questions/13545388/… Commented Jan 5, 2017 at 13:49
  • Thank you for the link, somehow I didn´t find this. The problem in this thread was, that the header was exactly 10 lines long. In my csv I don´t know how many lines I need to skip. Furthermore I want to get the line with the labels. I am not sure if genfromtxt is suitable for my problem. Commented Jan 5, 2017 at 15:10
  • If you know the header labels , read the data line by line and skip all lines until you match line with header Commented Jan 5, 2017 at 15:12
  • I dont know the header labels. I only know the line with the header labels starts with a blank. How can I search each line untill I find the line which starts with a blank? Commented Jan 5, 2017 at 15:18
  • blank is not an ideal value to look for , I see that in your data, first line starts with a space ' # Name Test Number1 ' Commented Jan 5, 2017 at 15:23

1 Answer 1

1
import csv

with open('path\to\sample.txt', 'r') as csvfile:

csvreader = csv.reader(csvfile, delimiter='\t')
foundheader=False
for row in csvreader:
    if row[0].startswith(' '):
        foundheader=True
    if foundheader:
        print row

sample data for testing

#Name Test Number1 
#Sometimes there is a comment which has one line
#or even more
# Name Test Number1 \\Name of the csv
#Sometimes there is a comment which has one line
# or even more
 Category1  Number2 Test    Temperature Voltage 
 #[1]   [1/min] [s] [°C]    [mV]    
 MinMax 2.3 5   9   48  22  
 MinMax 9.87    6.01    8   9   3
 MinMax 1   2   3   4   5
 MinMax 99.52   5   8   6.66    0

output

[' Category1', 'Number2', 'Test', 'Temperature', 'Voltage', '']
[' #[1]', '[1/min]', '[s]', '[\xc2\xb0C]', '[mV]', '']
[' MinMax', '2.3', '5', '9', '48', '22', '']
[' MinMax', '9.87', '6.01', '8', '9', '3']
[' MinMax', '1', '2', '3', '4', '5']
[' MinMax', '99.52', '5', '8', '6.66', '0']
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you Shijo! Unfortunately I can´t upvote, cause I don´t have enough reputation.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.