所以,基本上,我需要一个程序来打开一个 .dat 文件,检查每一行以查看它是否满足某些先决条件,如果满足,则将它们复制到一个新的 csv 文件中。
先决条件是它必须 1) 包含“$W”或“$S”,并且 2) 在 DAT 行的末尾具有最后一个值,例如一长串可接受的术语之一。(我可以简单地制作一个术语列表并将它们硬编码到一个列表中)
例如,如果 CSV 是购买信息列表,而最后一项是购买的商品,我只想包括水果。在这种情况下,最后一项是 ID 标签,我只想接受少数几个 ID 标签,但有一个大约 5 个可接受标签的列表。但是,标签的长度非常可观,但它们始终是列表中的最后一项(并且始终是列表中的第 4 项)
让我再举一个更好的例子,还是水果。
我原来的 .DAT 可能是:
DGH$G$H $2.53 London_Port Gyro
DGH.$WFFT$Q5632 $33.54 55n39 Barkdust
UYKJ$S.52UE $23.57 22#3 Apple
WSIAJSM_33$4.FJ4 $223.4 Ha25%ek Banana
只有一行:“UYKJ$S $23.57 22#3 Apple”会被复制,因为只有它同时具有 1)$W 或 $S(在本例中为 $S)和 2)最后一项是水果。制作 .csv 文件后,我将需要返回并用逗号替换所有空格,但这对我来说并不像弄清楚如何扫描每一行的需求并只复制那些被通缉。
我正在制作一些与这个非常相似的程序,它们打开 .dat 文件,检查每一行以查看它们是否符合要求,然后决定是否将它们复制到新文件中。但可悲的是,我不知道我在做什么。它们都很相似,一旦我弄清楚如何制作一个,其余的就很容易了。
编辑:.DAT 文件有几千行,如果这很重要的话。
EDIT2:我当前的一些代码片段
现在,我当前的版本是这样的:
def main():
#NewFile_Loc = C:\Users\J18509\Documents
OldFile_Loc=raw_input("Input File for MCLG:")
OldFile = open(OldFile_Loc,"r")
OldText = OldFile.read()
# for i in range(0, len(OldText)):
# if (OldText[i] != " "):
# print OldText[i]
i = split_line(OldText)
if u'$S' in i:
# $S is in the line
print i
main()
但它仍然非常波涛汹涌。我只是在学习python。
简要更新:我正在使用的服务器已关闭,可能会在接下来的几个小时内关闭,但我有我的新代码,其中有语法错误,但无论如何它都在这里。一旦我得到它的工作,我会再次更新。非常感谢大家!
import os
NewFilePath = "A:\test.txt"
Acceptable_Values = ('Apple','Banana')
#Main
def main():
if os.path.isfile(NewFilePath):
os.remove(NewFilePath)
NewFile = open (NewFilePath, 'w')
NewFile.write('Header 1,','Name Header,','Header 3,','Header 4)
OldFile_Loc=raw_input("Input File for Program:")
OldFile = open(OldFile_Loc,"r")
for line in OldFile:
LineParts = line.split()
if (LineParts[0].find($W)) or (LineParts[0].find($S)):
if LineParts[3] in Acceptable_Values:
print(LineParts[1], ' is accepted')
#This Line is acceptable!
NewFile.write(LineParts[1],',',LineParts[0],',',LineParts[2],',',LineParts[3])
OldFile.close()
NewFile.close()
main()