PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Tuesday, July 19, 2022

[FIXED] How to read a text file that can be any length into separate string and integer variables in python?

 July 19, 2022     input, integer, python, text, variables     No comments   

Issue

There is a data.txt text file in the following format (the length of the text file can be any length):

Start 111 139
A 122 155
B 133 217
C 144 223
Finish

The delimiter character between each value is a tabulator (\t), and the rows are ended with enters (\n). I would like to put each value into a separate variable with the correct type (int for numbers, string for texts). The length of the text file can be any length (D, E, F... rows with different numbers can be there). In the last row there is always one word: "Finish". For the example above I would like to get 5 string variables and 8 int variables overall. The ideal output would be the following:

str1 = str('Start')
int1 = int(111)
int2 = int(139)
str2 = str('A')
int3 = int(122)
int4 = int(155)
str3 = str('B')
int5 = int(133)
int6 = int(217)
str4 = str('C')
int7 = int(144)
int8 = int(223)
str5 = str('Finish')

The name of the variables can be anything, and also the cast is not required if your method already defines the type of the variables.

For the reading in parts I tried this:

with open('data.txt') as file:
    lines = [line.rstrip().split('\t') for line in file]
    print(lines)

But it gives me lists of threes, however, I would like to create separate variables for each value dynamically. Thank you for your help in advance!


Solution

Your example does not really make sense. But, if that is what you are looking for:

def conv(s):
    try:
        return ('int', int(s))
    except ValueError:
        return ('str', f"'{s}'")
    
cnt={}
with open('/tmp/file') as f:
    for line in f:
        for s in line.split():
            t=conv(s)
            cnt[t[0]]=cnt.get(t[0], 0)+1
            print(f'{t[0]}{cnt[t[0]]} = {t[0]}({t[1]})')

Prints:

str1 = str('Start')
int1 = int(111)
int2 = int(139)
str2 = str('A')
int3 = int(122)
int4 = int(155)
str3 = str('B')
int5 = int(133)
int6 = int(217)
str4 = str('C')
int7 = int(144)
int8 = int(223)
str5 = str('Finish')

DON'T try and make variables out of these! Instead, use a dict like so:

def conv(s):
    try:
        return ('int', int(s))
    except ValueError:
        return ('str', f"'{s}'")

cnt={}
data={}
with open('/tmp/file') as f:
    for line in f:
        for s in line.split():
            t=conv(s)
            cnt[t[0]]=cnt.get(t[0], 0)+1
            data[f'{t[0]}{cnt[t[0]]}'] = t[1]

>>> data
{'str1': "'Start'", 'int1': 111, 'int2': 139, 'str2': "'A'", 'int3': 122, 'int4': 155, 'str3': "'B'", 'int5': 133, 'int6': 217, 'str4': "'C'", 'int7': 144, 'int8': 223, 'str5': "'Finish'"}


Answered By - dawg
Answer Checked By - David Marino (PHPFixing Volunteer)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing