You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Photoshop JSX脚本:如何用原生JS读取固定路径CSV并转数组?

Photoshop JSX 读取本地CSV并转换为数组方案

1. 获取脚本同目录的CSV文件路径

在Photoshop JSX环境中,通过$.fileName可获取当前脚本的完整路径,结合File对象的parent属性就能得到脚本所在目录,再拼接CSV文件名即可生成目标文件的绝对路径:

// 获取脚本所在目录
const scriptDir = new File($.fileName).parent;
// 拼接CSV文件路径(假设CSV名为data.csv,与脚本同目录)
const csvFilePath = new File(scriptDir + "/data.csv");

2. 读取CSV文件内容

使用File对象的open()、read()方法读取文件内容,同时处理文件不存在的异常情况:

let csvContent = "";
if (csvFilePath.exists) {
    csvFilePath.open("r"); // 以只读模式打开文件
    csvContent = csvFilePath.read(); // 读取全部文件内容
    csvFilePath.close(); // 关闭文件流
} else {
    alert("指定的CSV文件不存在:" + csvFilePath.fsName);
    exit();
}

3. 解析CSV内容为二维数组

CSV解析需兼容带引号的单元格(比如单元格内容包含逗号),以下是原生JS实现的健壮解析逻辑:

function parseCSV(csvText) {
    const rows = [];
    const lines = csvText.split(/\r?\n/); // 兼容Windows和Unix换行符
    // 匹配CSV单元格的正则,处理带引号的特殊情况
    const regex = /("([^"]|"")*"|[^,]*)(,|$)/g;

    for (let line of lines) {
        if (line.trim() === "") continue; // 跳过空行
        const row = [];
        let match;
        while ((match = regex.exec(line)) !== null) {
            let cell = match[1];
            // 处理带引号的单元格:移除首尾引号,替换内部双引号为单引号
            if (cell.startsWith('"') && cell.endsWith('"')) {
                cell = cell.slice(1, -1).replace(/""/g, '"');
            }
            row.push(cell);
            // 匹配到最后一个单元格时退出循环
            if (match[3] === "") break;
        }
        rows.push(row);
    }
    return rows;
}

// 调用解析函数,得到二维数组格式的CSV数据
const csvArray = parseCSV(csvContent);

4. 完整示例代码

// 获取脚本所在目录
const scriptDir = new File($.fileName).parent;
// 拼接CSV文件路径
const csvFilePath = new File(scriptDir + "/data.csv");

let csvContent = "";
// 读取文件
if (csvFilePath.exists) {
    csvFilePath.open("r");
    csvContent = csvFilePath.read();
    csvFilePath.close();
} else {
    alert("CSV文件不存在:" + csvFilePath.fsName);
    exit();
}

// CSV解析函数
function parseCSV(csvText) {
    const rows = [];
    const lines = csvText.split(/\r?\n/);
    const regex = /("([^"]|"")*"|[^,]*)(,|$)/g;

    for (let line of lines) {
        if (line.trim() === "") continue;
        const row = [];
        let match;
        while ((match = regex.exec(line)) !== null) {
            let cell = match[1];
            if (cell.startsWith('"') && cell.endsWith('"')) {
                cell = cell.slice(1, -1).replace(/""/g, '"');
            }
            row.push(cell);
            if (match[3] === "") break;
        }
        rows.push(row);
    }
    return rows;
}

// 转换为数组并提取数据示例
const csvData = parseCSV(csvContent);

// 打印表头和第一行数据
alert("表头:" + csvData[0].join(", "));
if (csvData.length > 1) {
    alert("第一行数据:" + csvData[1].join(", "));
}

注意事项

  • 确保CSV文件编码为UTF-8,避免乱码;若使用其他编码,可在open()方法中指定编码,例如csvFilePath.open("r", "UTF-8")
  • 大体积CSV文件建议分批读取,避免内存占用过高
  • 解析函数支持单元格内容包含逗号、换行(需用引号包裹换行内容)

内容的提问来源于stack exchange,提问作者Hao Phung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:45:37