微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

f字符串多行打印顺序错误

如何解决f字符串多行打印顺序错误

我想用以下python(3.8)代码打印一份报告,但是您可以看到熊猫信息打印在顶部而不是底部。我似乎找不到这种奇怪行为的任何解决方案。有关如何解决此问题的任何想法?

time = 600
file = 'election_file.csv'
report = (
    f'Data Diagnostic Report\n'
    f'Date & time: {time}\n'
    f'Data file: {file}\n'
    f'Data frame header (first five lines):\n {election.head()}\n\n'
    f'Data frame information:\n {election.info()}\n'
    f'end of report\n'
)
print(report)

输出

time = 600...
<class 'pandas.core.frame.DataFrame'>
Index: 10 entries,Adams to Butler
Data columns (total 8 columns):
 #   Column   Non-Null Count  Dtype  
---  ------   --------------  -----  
 0   Obama    10 non-null     float64
 1   Romney   10 non-null     float64
 2   margin   10 non-null     float64
 3   state    10 non-null     object 
 4   total    10 non-null     int64  
 5   turnout  10 non-null     float64
 6   Voters   10 non-null     int64  
 7   winner   9 non-null      object 
dtypes: float64(4),int64(2),object(2)
memory usage: 720.0+ bytes
Data Diagnostic Report
Date & time: 600
Data file: election_file.csv
Data frame header (first five lines):
                Obama     Romney     margin state   total    turnout  Voters  \
Adams      35.482334  63.112001  27.629667    PA   41973  68.632677   61156   
Allegheny  56.640219  42.185820  14.454399    PA  614671  66.497575  924351   
Armstrong  30.696985  67.901278  37.204293    PA   28322  67.198140   42147   
Beaver     46.032619  52.637630   6.605012    PA   80015  69.483401  115157   
bedford    22.057452  76.986570  54.929118    PA   21444  66.619031   32189   

           winner  
Adams      Romney  
Allegheny   Obama  
Armstrong  Romney  
Beaver     Romney  
bedford    Romney  

Data frame information:
 None
end of report

解决方法

这是因为dataframe.info()在调用时会打印。因此,首先您会看到对dataframe.info()的调用结果(在这种情况下为输出),然后才打印f字符串。

换句话说,解释器首先评估f字符串中使用的所有“变量”,然后才打印格式化的字符串本身。那也是你看到的原因

Data frame information:
  None

在输出中。 info()打印数据,然后返回None(非常类似于内置的print)。

这种行为很容易重现:

def foo():
    print('foo')

print(f'Generated string {foo()}')

此输出

foo
Generated string None
,

解决此问题的一种方法是将报告分为两部分:

foreach($row as $data) { 
    $arr[] = [
        $data['data_id'],$TheData[$data['data_key']]['English'] 
        // ^
        // |__ This is on line 17
    ];
} 
echo json_encode($arr);
,

这是因为df.info()会在调用时立即打印,而不会返回任何内容。 试试这个,应该解决:

import io
buf = io.StringIO()
election.info(buf=buf)
electioninfo = buf.getvalue()

report = (
    f'Data Diagnostic Report\n'
    f'Date & time: {time}\n'
    f'Data file: {file}\n'
    f'Data frame header (first five lines):\n {election.head()}\n\n'
    f'Data frame information {electioninfo}:\n '
)
print(report)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。