【问题标题】:Including filename when reading a file in Python在 Python 中读取文件时包含文件名
【发布时间】:2019-03-28 07:56:15
【问题描述】:

我正在尝试使用以下代码在 Python 中读取文件:

with open(file) as fp:
    data = fp.read()

上面的脚本运行良好。但是,我试图将文件名包含在data 的输出中

我怎么能把它包括在内。

编辑:

添加具有预期结果的示例输出

电流输出:

col1,col2,col3
1,Prod_A,10
2,Prod_B,5

预期输出:

col1,col2,col3,filename
1,Prod_A,10,sales.csv
2,Prod_B,5,sales.csv

【问题讨论】:

  • fp.name 包含文件的名称。这是你需要的吗?
  • 嗯,这非常不清楚。假设文件名是"foo.txt",文件内容是"bar",你会希望data是……什么?
  • 你希望它如何“包含在输出中”?
  • 帮助我们为您提供帮助。请添加示例输入和输出。
  • file.split('/')[-1](或带有'\')在你打开它之前给你名字

标签: python filenames


【解决方案1】:

读取您的 csv 文件并添加新列:

import csv
import os

m, n = 'sales.csv', 'sales_temp.csv'

with open(m, newline='') as f:
    with open(n, 'w', newline='') as f_temp:
        w = csv.writer(f_temp)

        for r in csv.reader(f):
            w.writerow(r + ['filename']) if r[0] == 'col1' else w.writerow(r + [f.name])

os.remove(m)
os.rename(n, m)

【讨论】:

    【解决方案2】:

    这可能很简单

    data = {}
    
    with open("test.txt") as fp:
       data['name'] = fp.name
       data['content'] = fp.read()
    

    输出看起来像

    {'name': 'test.txt',
     'content': '124512451245124512451245124512451245124512451245\n'}
    

    但这真的取决于你想要data 的结构是什么。

    编辑:根据反馈,上面的例子可以用列表重写为

    data = []
    
    with open("test.txt") as fp:
       data.append(fp.name)
       data.append(fp.read())
    

    输出如下:

    ['test.txt', '124512451245124512451245124512451245124512451245\n']
    

    【讨论】:

    • 尝试使用列表来实现这一目标
    • @scottmartin 更新的答案是否解决了您的问题?如果是这样,请不要忘记关闭问题:)
    猜你喜欢
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    相关资源
    最近更新 更多