如何将Excel公式应用于整个列中的值?

时间:2018-07-24 14:38:14

标签: python python-3.x python-2.7 csv excel-formula

我正在尝试解析文件夹中的文件名,并弄清楚如何将它们加载到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文件中的数据的样子。

sampledata.csv:

       A                  B

ndjsmdhfr_145874 

jdmsjfht_273647

hfgryuyw_756475

jgmfhdhr_736453

jdmsdhfyt_548745

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

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

2 个答案:

答案 0 :(得分:0)

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

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)])

答案 1 :(得分:0)

这三行代码将选择B列中的第一个单元格并应用公式,然后将其复制到

列中
Range("B1").Select
ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],FIND(""_"",RC[-1]) - 1)"
Selection.AutoFill Range(ActiveCell, ActiveCell.Offset(0, -1).End(xlDown).Offset(0, 1))