【问题标题】:Python strip() and readlines()Python strip() 和 readlines()
【发布时间】:2017-07-26 18:34:38
【问题描述】:

我有一个我正在尝试运行的代码,它将比较 csv 文件中的值与我在 py 文件中设置的阈值。

我的 csv 文件有一个类似于下面的输出,但有 1030 行

 -46.62

 -47.42

 -47.36

 -47.27

 -47.36

 -47.24

 -47.24

 -47.03

 -47.12

注意:值之间没有线,但它们之前有一个空格。

我的第一次尝试是使用以下代码:

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]

它给出了以下输出:

[' -44.94\n']

[' -45.06\n']

[' -45.09\n']

[' -45.63\n']

[' -45.92\n']

我的第一个想法是使用.strip() 删除空格和\n,但这在列表中不受支持并返回错误:

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

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

我的下一个代码如下:

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]

返回另一个错误:

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

什么是最有效的方法是只读取 5 个特定行而没有任何空格或\n,然后能够在后续计算中使用它们,例如:

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

【问题讨论】:

  • 删除print[whatever]中的括号。每次打印任何内容时都会构建一个单元素列表,这会让您感到困惑。
  • 恕我直言,您应该使用正确的csv.reader 来读取 csv 数据。

标签: python-2.7 strip readlines


【解决方案1】:

你可以使用strip(),但是你需要使用read()而不是readlines()。另一种方法是,如果一行中有多个值用逗号分隔,则可以使用如下代码:

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

您还可以将“vals”附加到空列表中。结果,您将获得一个列表,其中包含每行的值列表。

【讨论】:

    【解决方案2】:

    有点不清楚你想做什么,但如果你只是想读取一个文件,将每个值与阈值进行比较,并在此处保留上限值:

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

    然后你可以根据你的需要调整它......

    【讨论】:

    • 我认为关键的部分是剥离空间和\n
    • 如果\n不在您的原始文件中,这是由于打开和读取文件的方式,您可以轻松避免...
    【解决方案3】:

    感谢所有 cmets 和建议,但它们并不是我所需要的。

    然而,我已经应用了一种解决方法,尽管公认很笨重。

    我从原始文件中创建了 5 个附加文件,每个文件中只有一个值。从这里我现在可以剥离空间和 /n 并将它们作为变量保存在本地。我不再需要阅读线

    这些变量可以相互比较并确定最佳选择的阈值。

    【讨论】:

      猜你喜欢
      • 2014-07-04
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 2011-09-08
      相关资源
      最近更新 更多