user7524882
user7524882

Reputation: 9

Python strip() and readlines()

I have a code that I am trying to run which will compare a value from a csv file to a threshold that I have set within the py file.

My csv file has an output similar to below, but with 1030 lines

 -46.62

 -47.42

 -47.36

 -47.27

 -47.36

 -47.24

 -47.24

 -47.03

 -47.12

Note: there are no lines between the values but there is a single space before them.

My first attempt was with this code:

file_in5 = open('710_edited_capture.csv', 'r')

line5=file_in5.readlines()

a=line5[102]

b=line5[307]

c=line5[512]

d=line5[717]

e=line5[922]

print[a]

print[b]

print[c]

print[d]

print[e]

which gave the output of:

[' -44.94\n']

[' -45.06\n']

[' -45.09\n']

[' -45.63\n']

[' -45.92\n']

My first thought was to use .strip() to remove the space and the \n but this is not supported in lists and returns the error:

Traceback (most recent call last):
  File "/root/test.py", line 101, in <module>

line5=line5.strip()
AttributeError: 'list' object has no attribute 'strip'

My next code below:

for line5 in file_in5:    

    line5=line5.strip()

    line5=file_in5.readlines()

    a=line5[102]

    b=line5[307]

    c=line5[512]

    d=line5[717]

    e=line5[922]

print[a]

print[b]

print[c]

print[d]

print[e]

Returns another error:

Traceback (most recent call last):
  File "/root/test.py", line 91, in <module>

line5=file_in5.readlines()
ValueError: Mixing iteration and read methods would lose data

What is the most efficient way to read in just 5 specific lines without any spaces or \n, and then be able to use them in subsequent calculations such as:

if a>threshold and a>b and a>c and a>d and a>e:
   print ('a is highest and within limit')
   CF=a

Upvotes: -2

Views: 3099

Answers (4)

Alexandr Geller
Alexandr Geller

Reputation: 1

Read lines and only then make strip on it.

Upvotes: -2

Olechka Tikhonova
Olechka Tikhonova

Reputation: 11

You can use strip(), but you need to use read() instead of readlines(). Another way, if you have more than one value in a row with comma separation, you can use the code as below:

with open('710_edited_capture.csv', 'r') as file:
    file_content=file.readlines()
        for line in file_content:
            vals = line.strip().split(',')
            print(vals)

You can also append "vals" to an empty list. As a result, you will get a list that contains a list of values for each line.

Upvotes: 1

user7524882
user7524882

Reputation: 9

Thanks for all the comments and suggestions however they are not quite what I needed.

I have however applied a workaround, although admittedly clunky.

I have created 5 additional files from the original with only the one value in each. From this I can now strip the space and /n and save them locally as a variable. I no longer needed the readlines

These variables can be compared to each other and the threshold to determine the optimum choice.

Upvotes: 1

Dadep
Dadep

Reputation: 2788

it's a little bit unclear what you want to do but if you just want to read a file compare each value to a threshold value and keep upper value here a example :

threshold=46.2
outlist=[]
with open('data.csv', 'r') as data:
    for i in data: 
        if float(i)>threshold: 
             outlist.append(i)

then you can adapt it to your needs...

Upvotes: 0

Related Questions