【问题标题】:How to unformat a filename?(Parsing or opposite of format)如何取消格式化文件名?(解析或格式相反)
【发布时间】:2021-04-13 02:29:57
【问题描述】:

我想返回已经被这个函数转换的文件的文件名。

from more_itertools import chunked

def file_conversion(input_file, output_file_pattern, chunksize):
    with open(input_file) as fin:
        reader = csv.DictReader(fin, delimiter=',')
        for i, chunk in enumerate(chunked(reader, chunksize)):
            with open(output_file_pattern.format(i), 'w', newline='') as fout:
                writer = csv.DictWriter(fout, reader.fieldnames, delimiter='|')
                writer.writeheader()
                writer.writerows(chunk)
                print("Successfully converted into", output_file)
script_dir = os.path.dirname(os.path.abspath(__file__))
dest_dir = os.path.join(script_dir, 'temp')
try:
     os.makedirs(dest_dir)
except OSError:
     pass
path = os.path.join(dest_dir,'out{:03}.csv' )

#this creates file as out000.csv and more out001.csv or out002.csv depending upon the number of lines

file_conversion('in.csv', path, 7000) 
base_name = os.path.basename(path)
print(base_name)  #returns out{03}.csv

这会打印出{03}.csv。但我想要像out000.csv这样转换的文件名的结果。有什么办法可以退货吗?如果文件较多,如何返回文件名?

【问题讨论】:

  • 你的意思是你想要一个在file_conversion()中写入的所有文件名的列表?
  • 是的。 file_conversion()创建的所有输出文件
  • 好吧,你应该把它们收集起来并归还它们。你以前写过这样的代码吗?
  • 请举例说明。我最近才开始。

标签: python python-3.x parsing formatting chunked


【解决方案1】:

好的,你需要在你的函数中创建一个集合,并用所有使用的文件名填充它:

def file_conversion(input_file, output_file_pattern, chunksize):
    output_filenames = []
    with open(input_file) as fin:
        reader = csv.DictReader(fin, delimiter=',')
        for i, chunk in enumerate(chunked(reader, chunksize)):
            output_filename = output_file_pattern.format(i)
            with open(output_filename, 'w', newline='') as fout:
                output_filenames.append(output_filename)
                writer = csv.DictWriter(fout, reader.fieldnames, delimiter='|')
                writer.writeheader()
                writer.writerows(chunk)
                print("Successfully converted into", output_file)
    return output_filenames

你可以这样称呼它:

paths = file_conversion('in.csv', path, 7000) 
base_names = [os.path.basename(path) for path in paths]
print(base_names)

【讨论】:

  • 这会返回一个列表,但我可以对其进行迭代。
  • 是的,没错。 pathsopen() 中使用的完整文件名的列表。我已经将其转换为base_names,它应该是一个仅包含基本名称的列表,例如["out000.csv", "out001.csv", ... ]
  • 你能帮我解决这个问题吗? stackoverflow.com/questions/65655827/…这个程序的扩展形式。
猜你喜欢
  • 2011-07-05
  • 1970-01-01
  • 2018-07-10
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
  • 2018-06-24
  • 1970-01-01
相关资源
最近更新 更多