Power Query无法识别txt文件Tab分隔符,如何修改代码合并多份光谱数据?
Power Query读取Tab分隔TXT批量合并光谱数据解决方案
你只需修改代码中读取文件内容的AddedFileContents步骤,给Csv.Document指定Tab作为分隔符即可,其余逻辑无需调整。
需修改的代码行
原代码中AddedFileContents步骤为:
AddedFileContents = Table.AddColumn(RemovedColumns, "FileContents", each Csv.Document([Content])),
修改为:
AddedFileContents = Table.AddColumn(RemovedColumns, "FileContents", each Csv.Document([Content], [Delimiter = "#(tab)"])),
完整修改后代码
let Source = Folder.Files("C:\Users\xxxxx\Desktop\new"), // 筛选仅TXT文件 FilteredTxt = Table.SelectRows(Source, each [Extension] = ".txt"), // 移除无关元数据列 RemovedColumns = Table.RemoveColumns(FilteredTxt,{"Name", "Extension", "Date accessed", "Date modified", "Date created", "Attributes", "Folder Path"}), // 读取文件内容,指定Tab为分隔符 AddedFileContents = Table.AddColumn(RemovedColumns, "FileContents", each Csv.Document([Content], [Delimiter = "#(tab)"])), // 移除原始二进制内容列 RemovedBinaryContent = Table.RemoveColumns(AddedFileContents,{"Content"}), // 生成列名序号 #"Added Index" = Table.AddIndexColumn(RemovedBinaryContent, "Index", 2, 1), #"Added Prefix" = Table.TransformColumns(#"Added Index", {{"Index", each "Column" & Text.From(_, "en-US"), type text}}), #"Renamed Columns" = Table.RenameColumns(#"Added Prefix",{{"Index", "ColumnName"}}), ListOfRecords = Table.ToRecords(#"Renamed Columns"), // 循环合并所有文件的强度列 BuildTable = List.Accumulate(ListOfRecords, Table.FromList(ListOfRecords{0}[FileContents][Column1], each{_}), (TableSoFar,NewColumn) => Table.ExpandTableColumn(Table.NestedJoin(TableSoFar, "Column1", NewColumn[FileContents], "Column1", "Dummy", JoinKind.LeftOuter), "Dummy", {"Column2"}, {NewColumn[ColumnName]})), // 按波长升序排序 #"Sorted Rows" = Table.Sort(BuildTable,{{"Column1", Order.Ascending}}) in #"Sorted Rows"
补充说明
- 你之前尝试修改
Table.FromList的参数是错误的,该步骤是从第一个文件提取波长列生成初始表,和分隔符识别无关 - 后续如果需要自定义列名(比如用文件名作为强度列名),可以保留
Name列后替换生成列名的逻辑即可
内容的提问来源于stack exchange,提问作者emir
相关产品推荐
相关产品推荐

