尝试从python中解析的文本代码创建两个CSV文件

尝试从python中解析的文本代码创建两个CSV文件,python,pandas,Python,Pandas,我对代码非常陌生。我正试图修改一个我在网上找到的程序,只过滤出带有M32的ICD10或一些变体(M32.1、M32.2等)的行 当我运行代码时,我的表中有很多重复的输出,我不知道为什么或者如何修复它,你能帮我吗 fileObj = open(r"C:\Users\RSHAR\Documents\Research Project\CDC Data Download\CDC Data Download\Eric Yen _9-17-2020\MortAC1999\MULT1999.AllC

我对代码非常陌生。我正试图修改一个我在网上找到的程序,只过滤出带有M32的ICD10或一些变体(M32.1、M32.2等)的行

当我运行代码时,我的表中有很多重复的输出,我不知道为什么或者如何修复它,你能帮我吗

fileObj = open(r"C:\Users\RSHAR\Documents\Research Project\CDC Data Download\CDC Data Download\Eric Yen _9-17-2020\MortAC1999\MULT1999.AllCnty\MULT1999.AllCnty.txt",'r')
fileOutObj = open(r"C:\Users\RSHAR\Documents\Research Project\CDC Data Download\CDC Data Download\Eric Yen _9-17-2020\MortAC1999\MULT1999.AllCnty\MULT1999.AllCnty.M32.csv","a")
fileOutObj.write('Record, Sex, Race_R1, Race_R2, Hispanic_Origin_Recode, Age, Marital, Education, ICD10, FIPS_Occur_State, FIPS_Occur_County, FIPS_Reside_State, FIPS_Reside_County, FIPS_Reside_City, Record_Axis\n')

outStr = ""

for line in fileObj:
        Record = line[18].strip()
        Sex = line[58].strip()
        Race_R1 = line[61].strip()
        Race_R2 = line[62].strip()
        Hispanic_Origin_Recode = line[81].strip()
        Age = line[63:65].strip()
        Marital = line[76].strip()
        Education = line[51:52].strip()
        ICD10 = line[141:144].strip()
        FIPS_Occur_State = line[118:119].strip()
        FIPS_Occur_County = line[120:122].strip()
        FIPS_Reside_State = line[123:124].strip()
        FIPS_Reside_County = line[125:127].strip()
        FIPS_Reside_City = line[96:100].strip()
        Record_Axis = line [340:439].strip()
        if ICD10 in ['M32']:
            outStr = (Record+ ','+Sex+ ',' +Race_R1 +              ', ' + Race_R2+ ', ' + Hispanic_Origin_Recode +', '+ Age +               ', ' + Marital +         ', ' + Education + \
                         ', ' + ICD10 +               ', ' + FIPS_Occur_State +              ', ' + FIPS_Occur_County +           ', ' + FIPS_Reside_State + \
                         ', ' + FIPS_Reside_County + ', ' +FIPS_Reside_City +', ' + Record_Axis + '\n')
        fileOutObj.write(outStr)



print("Parse complete.")
fileOutObj.close()
fileObj.close()

每次迭代后,您的对象outStr应该重置为空字符串。否则,每个新行将添加到旧行。写入文件时,将再次写入完整的字符串。您可以在循环内定义外扩,以便将范围定义为循环的一次迭代

if
-语句中有一些连线。变量ICD10是一个格式为M32.*的字符串。您正在将此字符串与此行中定义的数组元素进行比较。只有元素“M32”

我提出了一些不同的解决方案,消除了for循环。我让熊猫做这件事

有熊猫的功能
read_fwf
。您可以定义列并为它们命名。读取后,可以筛选ICD10列

tbl = pd.read_fwf("data_file.txt",
  colspecs=[[0,1], [2, 3], [3, 8]],
  header=None,
  names=["Record ", "ICD10"]
  usecols=[1])
阅读后,您可以使用
将其写入光盘,以_csv

如果文件太大,无法立即读取,请尝试使用参数
chunksize
iterator
。只有在这种情况下,您才定义了自己的循环