首页 > 解决方案 > 如何将 Excel 公式应用于整个列中的值?

问题描述

我正在尝试解析文件夹中的文件名并弄清楚如何将它们加载到 csv 文件中,但我需要将公式应用于列以获得最终结果。代码和数据以及我计划使用的 Excel 公式如下。

这段代码从文件夹“testfolder”中获取文件名,并将它们转储到 csv 文件中。

代码:

import os, csv

f = open("/home/niteninja/Documents/sampledata.csv", 'r+')
w=csv.writer(f)
for path, dirs, files in os.walk("/home/niteninja/testfolder"):
    for filename in files:
        w.writerow([filename])

f.truncate()

这是运行上述代码后 csv 文件中的数据的示例。

样本数据.csv:

       A                  B

ndjsmdhfr_145874 

jdmsjfht_273647

hfgryuyw_756475

jgmfhdhr_736453

jdmsdhfyt_548745

我想要做的是实现这个公式:"LEFT(A1,FIND("_",A1) - 1)"在 B 列中。

这样做的目的是消除下划线和后面的任何字符。我希望能够将此公式应用于 A 列中的单元格并将新值输出到 B 列。我无法找出解决此问题的正确语法。

标签: pythonpython-3.xpython-2.7csvexcel-formula

解决方案


首先为单个字符串定义一个函数:

def splitter(x):
    return x.split('_')[0]

print(splitter('ndjsmdhfr_145874'))
# ndjsmdhfr

然后写入您的 CSV 文件。请记住newline=''用作open. 此外,建议您使用该with open(...)结构来读取/写入文件。这是一些伪代码:

with open('out_file.csv', 'w', newline='') as fout:
    w = csv.writer(fout)
    for path, dirs, files in os.walk("/home/niteninja/testfolder"):
        for filename in files:
            w.writerow([filename, splitter(filename)])

推荐阅读