Python:无法通过`for`循环传递从文件中读取的字符串值

Posted

技术标签:

【中文标题】Python:无法通过`for`循环传递从文件中读取的字符串值【英文标题】:Python: unable to pass string values read from file through `for` loop 【发布时间】:2021-12-06 22:17:30 【问题描述】:

我正在尝试返回数据框中所有值的中位数,该数据框中的行还包含字符串值列表中的每一个。我可以像这样一次成功地让它手动工作:

line = "History"
df_q = df_genre['roi'].loc[df_genre['genre'] == line].median()
print(line, df_q)

但是当我尝试通过if 循环读取字符串值来自动化该过程时,我得到nan 结果而不是中值。这是我的代码:

with open('genres_unique') as i:
    for line in i:
        df_line = df_genre['roi'].loc[df_genre['genre'] == line].median()
        print(line, df_line)

【问题讨论】:

您能否通过添加第一个代码块的输出、genres_unique 中的内容以及第二个代码块的预期输出来为您的问题添加上下文? 但是对于一些可能看起来错误的前期事情是for line in i:,它应该是for line in i.readlines():for line in i 将尝试迭代 i,这是一个文件对象(不可迭代,因此为 NaN)。您需要从文件中取出这些行,然后迭代这些行 (i.readlines()) @TimothyWong:不,这就是直接在文件上进行迭代的等价物。可能的问题是这些行(可能是最后一行除外)将以换行符结尾,这与数据帧值不匹配。 【参考方案1】:

@jasonharper 是正确的:我需要从文本文件中删除换行符。这是使用rstrip的正确代码:

with open('genres/genres_unique') as i:
    for line in i:
        newline = line.rstrip()
        df_line = df_genre['roi'].loc[df_genre['genre'] == newline].median()
        print(line, df_line)

【讨论】:

以上是关于Python:无法通过`for`循环传递从文件中读取的字符串值的主要内容,如果未能解决你的问题,请参考以下文章

Python中读文件写文件的操作方法

如何从for循环中获取用户输入的数据到kivymd中的python文件

如何从For循环中制作流

地形中的for循环

从python中的for循环返回值

无法从构造函数中将数组值传递给向量