【问题标题】:Adding filename to last column in csv using python使用python将文件名添加到csv中的最后一列
【发布时间】:2014-12-16 23:51:32
【问题描述】:

我有一个充满 .mpt 文件的文件夹,每个文件都具有相同的数据格式。 我需要从所有文件中删除前 57 行并将这些文件附加到一个 csv - output.csv 中。 我已经有那个部分了:

import glob
import os

dir_name = 'path name'
lines_to_ignore = 57
input_file_format = '*.mpt'
output_file_name = "output.csv"

def convert():
    files = glob.glob(os.path.join(dir_name, input_file_format))
    with open(os.path.join(dir_name, output_file_name), 'w') as out_file:
        for f in files:
            with open(f, 'r') as in_file:
                content = in_file.readlines()
                content = content[lines_to_ignore:]
                for i in content:
                    out_file.write(i)

print("working")
convert()
print("done")

这部分工作正常。

如何将每个 .mpt 文件的文件名添加为 output.csv 的最后一列 谢谢!

【问题讨论】:

  • 把convert()的最后一行改成out_file.write(",".join([i,f]))?
  • 使用 csv.reader 并将文件名附加到最后一行

标签: python csv


【解决方案1】:

这是一个快速的'n肮脏的解决方案。

在这个循环中,变量i 只是一个字符串(CSV 文件中的一行):

            for i in content:
                out_file.write(i)

所以您只需要 1) 去掉行尾字符(“\n”或“\r\n”)并附加“,”。

如果您使用的是 Unix,请尝试:

for i in content:
  i = i.rstrip("\n") + "," + output_file_name + "\n"
  out_file.write(i)

这假定字段分隔符是逗号。另一种选择是:

for i in content:
  i = i.rstrip() + "," + output_file_name
  print >>out_file, i

这将从i 的末尾删除所有个空格。

如果您需要引用输出文件名,请添加引号:

  i = i.rstrip(...) + ',"' + output_file_name '"'

【讨论】:

    【解决方案2】:

    相关部分:

    with open(f, 'r') as in_file:
        content = in_file.readlines()
        content = content[lines_to_ignore:]
        for i in content:   
            new_line = ",".join([i.rstrip(), f]) + "\n" #<-- this is new
            out_file.write(new_line)                    #<-- this is new
    

    【讨论】:

    • 感谢您的回复,但注意到 2 个问题:1) 整个路径名正在写入,例如C:\\dirname\filename.., 2) 路径名被写入数据的最后一列 - (我想添加另一列仅包含文件名。),您能否提出解决方法。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2017-03-06
    • 1970-01-01
    相关资源
    最近更新 更多