将目录中所有文件的名称及其绝对路径写入bash中的csv文件

将目录中所有文件的名称及其绝对路径写入bash中的csv文件,bash,csv,Bash,Csv,这比我预期的要难,但我有一个文件夹,里面有大约100个.csv格式的数据集 我想创建一个包含以下字段的.csv文件: 第一个字段是文件名。e、 g.user\u profile.csv 第二个字段是文件的绝对路径,例如/Users/yuqli/project/user_profile.csv 我想用bash命令来实现这一点。但到目前为止,我只能做到: ls >> out.csv 将所有文件名写入一个txt文件。。。我看到一些人使用for循环,但在.csv文件中操纵行似乎是禁止的

这比我预期的要难,但我有一个文件夹,里面有大约100个.csv格式的数据集

我想创建一个包含以下字段的.csv文件:

  • 第一个字段是文件名。e、 g.
    user\u profile.csv
  • 第二个字段是文件的绝对路径,例如
    /Users/yuqli/project/user_profile.csv
我想用bash命令来实现这一点。但到目前为止,我只能做到:

ls >> out.csv
将所有文件名写入一个txt文件。。。我看到一些人使用for循环,但在.csv文件中操纵行似乎是禁止的,我不知道在for循环中放什么


仅仅使用Python是否更好?感谢您的帮助。。。谢谢

感谢上面大师的建议,我想出了这个Python程序,1)提取文件名,2)提取每个文件中的字段名。欢迎提出任何意见。谢谢

import os
import csv
info = {}    # store all information into a Python dictionary
for filename in os.listdir(os.getcwd()):
    with open(filename, newline='') as f:
        reader = csv.reader(f)
        row1 = next(reader)
        info[filename] = row1

path = os.getcwd()
header = 'field, dataset, path'
write_file = "output.csv"
with open(write_file, "w") as output:
    output.write(header + '\n')
    for key, value in info.items():
        for elem in value:
            curr_path = path + key
            line = '{0}, {1}, {2}'.format(elem, key, curr_path)
            output.write(line + '\n')

您最好使用Python。简单的答案会把细节(比如文件名中有逗号、换行符或引号)弄错。
find“$PWD”-type f-printf''%f',“%p”\n'
是简单但错误的答案之一,顺便说一句。@charlesduff谢谢!我花了几个小时研究壳牌的能力。。。用Python的
os
模块解决了这个问题。答案也不错!谢谢除非您同时使用
csv
模块,否则您的解决方案可能与上面提到的
find
命令一样错误。您确实应该在输出端使用
csv.writer()
;不能直接替换为CSV字符串(即不加引号)的文件名将出现错误行为(与我的
find-printf
示例相同!)。@charlesduff感谢您的评论!“不能直接替换为CSV字符串的文件名(即,不加引号)”是什么意思?同时,我将研究如何使用csv.writer()…请参阅我在最近对这个问题的评论中给出的一个病理病例示例-
touch
command创建的文件名是否在没有正确转义的情况下被放入csv文件中,它将被Excel或其他CSV阅读器解析成单独的列。(这甚至不像它们得到的那样病态;检查代码之后如何正确地运行代码。触摸$$‘nLead’/CODE已经运行,以生成一个在其中间有换行符的名称。因此该文件被命名为hello、“残忍”、Word、txt。我发现很难解析单引号/双引号,即使对于人类:)